<?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=Nfi</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=Nfi"/>
	<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Special:Contributions/Nfi"/>
	<updated>2026-05-09T05:41:30Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.42.3</generator>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Reference16r1:Concept_App_Service_IP&amp;diff=79697</id>
		<title>Reference16r1:Concept App Service IP</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Reference16r1:Concept_App_Service_IP&amp;diff=79697"/>
		<updated>2026-04-28T12:31:22Z</updated>

		<summary type="html">&lt;p&gt;Nfi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Concept|Apps]]&lt;br /&gt;
[[Category:Concept|IP]]&lt;br /&gt;
&lt;br /&gt;
The App IP is an app which offers the PBX functionality and further functionalities as App service on our innovaphone App Platform.&lt;br /&gt;
&lt;br /&gt;
== Applies To == &lt;br /&gt;
&lt;br /&gt;
* innovaphone firmware and apps V16&lt;br /&gt;
&lt;br /&gt;
==Requirements==&lt;br /&gt;
* innovaphone Application Platform (image version 140011 or higher)&lt;br /&gt;
&lt;br /&gt;
==Concept==&lt;br /&gt;
&lt;br /&gt;
The App IP offers modules known from innovaphone gateways, like the PBX, TURN server functionality etc.&lt;br /&gt;
&lt;br /&gt;
==How it works==&lt;br /&gt;
&lt;br /&gt;
=== Single instance mode ===&lt;br /&gt;
Unlike other App Services, the App IP is a single instance App Service, so you can create &#039;&#039;&#039;just&#039;&#039;&#039; a single instance and not multiple instances.&lt;br /&gt;
&lt;br /&gt;
== Licensing ==&lt;br /&gt;
Standard licensing mechanisms apply to the App IP as they apply to innovaphone gateways.&lt;br /&gt;
&lt;br /&gt;
In addition, every port license requires a dedicated IPAP license (similar to the IPVA license for virtual machines).&lt;br /&gt;
&lt;br /&gt;
== Apps ==&lt;br /&gt;
&lt;br /&gt;
There is no App provided by this App Service.&lt;br /&gt;
&lt;br /&gt;
== PBX Manager Plugins ==&lt;br /&gt;
&lt;br /&gt;
There is no PBX Manager Plugin provided by this App Service.&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
The configuration is done as an innovaphone gateway is configured too.&lt;br /&gt;
&lt;br /&gt;
=== Create instance ===&lt;br /&gt;
You have to create one instance for the App IP Service.&lt;br /&gt;
&lt;br /&gt;
[[Courseware:IT Advanced - 04 Setting up the Application Platform#Adding an App Service instance|Here]] are more informations how to do this.&lt;br /&gt;
&lt;br /&gt;
We recommend the following settings:&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Name&#039;&#039;&#039; = ip&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Domain&#039;&#039;&#039; = customer domain (system name of the PBX)&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Password&#039;&#039;&#039; = The password must be set to &amp;quot;pwd&amp;quot; for Install and will be changed during the process.&lt;br /&gt;
&lt;br /&gt;
=== Install Process ===&lt;br /&gt;
Install can be started under the webserver path of the App IP instance and /&#039;&#039;install.htm&#039;&#039;, e.g.: http://app.domain.com/domain.com/ip/install.htm&lt;br /&gt;
&lt;br /&gt;
⚠️ Use standard ports for installation. If necessary, install via a reverse proxy&lt;br /&gt;
&lt;br /&gt;
⚠️ Do not use the localhost (127.0.0.1) address&lt;br /&gt;
&lt;br /&gt;
=== Advanced UI ===&lt;br /&gt;
The advanced UI is reachable under the webserver path of the App IP instance and /admin.xml?xsl=admin.xsl, e.g.:&lt;br /&gt;
https://app.domain.com/domain.com/ip/admin.xml?xsl=admin.xsl&lt;br /&gt;
&lt;br /&gt;
=== IP configuration ===&lt;br /&gt;
As the App IP is just an App on an App Platform, there are no IP4/IP6, NTP etc. settings as on other innovaphone devices.&lt;br /&gt;
&lt;br /&gt;
==== Devices App ====&lt;br /&gt;
If your App Platform which runs the App IP is connected to a Devices App, you can access the Advanced UI with the &#039;&#039;&#039;PBX&#039;&#039;&#039; tab of your App Platform device.&lt;br /&gt;
&lt;br /&gt;
==Troubleshooting==&lt;br /&gt;
The App IP offers standard tracing mechanism for App Services and in addition mechanisms known from innovaphone gateways.&amp;lt;br/&amp;gt;&lt;br /&gt;
You can enable module related trace flags with config change commands or by setting trace flags under Maintenance -&amp;gt; Tracing in the Advanced UI of the App IP.&lt;br /&gt;
&lt;br /&gt;
 Trace files are not found under Maintenance -&amp;gt; Tracing but on the App IP service on your App Platform Manager.&lt;br /&gt;
&lt;br /&gt;
==Known issues==&lt;br /&gt;
The installation process must be performed using a DNS name rather than an IP address. &amp;lt;br&amp;gt;&lt;br /&gt;
The URL must include the parameter &#039;&#039;?apdns=&amp;quot;DNS from App Platform&amp;quot;&#039;&#039; in the path, for example: http://app.domain.com/domain.com/ip/install.htm?apdns=pbx.domain.com &amp;lt;br&amp;gt;&lt;br /&gt;
Starting with version 16r1 sr1, installation using an IP address is supported. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
However, it is generally recommended to use DNS for the installation.&lt;br /&gt;
&lt;br /&gt;
==Related Articles==&lt;br /&gt;
* [[Reference16r1:Concept_innovaphone_App_Platform_Container]]&lt;/div&gt;</summary>
		<author><name>Nfi</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Reference16r1:Concept_App_Service_IP&amp;diff=79676</id>
		<title>Reference16r1:Concept App Service IP</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Reference16r1:Concept_App_Service_IP&amp;diff=79676"/>
		<updated>2026-04-28T11:53:42Z</updated>

		<summary type="html">&lt;p&gt;Nfi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Concept|Apps]]&lt;br /&gt;
[[Category:Concept|IP]]&lt;br /&gt;
&lt;br /&gt;
The App IP is an app which offers the PBX functionality and further functionalities as App service on our innovaphone App Platform.&lt;br /&gt;
&lt;br /&gt;
== Applies To == &lt;br /&gt;
&lt;br /&gt;
* innovaphone firmware and apps V16&lt;br /&gt;
&lt;br /&gt;
==Requirements==&lt;br /&gt;
* innovaphone Application Platform (image version 140011 or higher)&lt;br /&gt;
&lt;br /&gt;
==Concept==&lt;br /&gt;
&lt;br /&gt;
The App IP offers modules known from innovaphone gateways, like the PBX, TURN server functionality etc.&lt;br /&gt;
&lt;br /&gt;
==How it works==&lt;br /&gt;
&lt;br /&gt;
=== Single instance mode ===&lt;br /&gt;
Unlike other App Services, the App IP is a single instance App Service, so you can create &#039;&#039;&#039;just&#039;&#039;&#039; a single instance and not multiple instances.&lt;br /&gt;
&lt;br /&gt;
== Licensing ==&lt;br /&gt;
Standard licensing mechanisms apply to the App IP as they apply to innovaphone gateways.&lt;br /&gt;
&lt;br /&gt;
In addition, every port license requires a dedicated IPAP license (similar to the IPVA license for virtual machines).&lt;br /&gt;
&lt;br /&gt;
== Apps ==&lt;br /&gt;
&lt;br /&gt;
There is no App provided by this App Service.&lt;br /&gt;
&lt;br /&gt;
== PBX Manager Plugins ==&lt;br /&gt;
&lt;br /&gt;
There is no PBX Manager Plugin provided by this App Service.&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
The configuration is done as an innovaphone gateway is configured too.&lt;br /&gt;
&lt;br /&gt;
=== Create instance ===&lt;br /&gt;
You have to create one instance for the App IP Service.&lt;br /&gt;
&lt;br /&gt;
[[Courseware:IT Advanced - 04 Setting up the Application Platform#Adding an App Service instance|Here]] are more informations how to do this.&lt;br /&gt;
&lt;br /&gt;
We recommend the following settings:&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Name&#039;&#039;&#039; = ip&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Domain&#039;&#039;&#039; = customer domain (system name of the PBX)&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Password&#039;&#039;&#039; = The password must be set to &amp;quot;pwd&amp;quot; for Install and will be changed during the process.&lt;br /&gt;
&lt;br /&gt;
=== Install Process ===&lt;br /&gt;
Install can be started under the webserver path of the App IP instance and /&#039;&#039;install.htm&#039;&#039;, e.g.: http://dns/domain.com/ip/install.htm&lt;br /&gt;
&lt;br /&gt;
⚠️ Use standard ports for installation. If necessary, install via a reverse proxy&lt;br /&gt;
&lt;br /&gt;
⚠️ Do not use the localhost (127.0.0.1) address&lt;br /&gt;
&lt;br /&gt;
=== Advanced UI ===&lt;br /&gt;
The advanced UI is reachable under the webserver path of the App IP instance and /admin.xml?xsl=admin.xsl, e.g.:&lt;br /&gt;
https://dns/domain.com/ip/admin.xml?xsl=admin.xsl&lt;br /&gt;
&lt;br /&gt;
=== IP configuration ===&lt;br /&gt;
As the App IP is just an App on an App Platform, there are no IP4/IP6, NTP etc. settings as on other innovaphone devices.&lt;br /&gt;
&lt;br /&gt;
==== Devices App ====&lt;br /&gt;
If your App Platform which runs the App IP is connected to a Devices App, you can access the Advanced UI with the &#039;&#039;&#039;PBX&#039;&#039;&#039; tab of your App Platform device.&lt;br /&gt;
&lt;br /&gt;
==Troubleshooting==&lt;br /&gt;
The App IP offers standard tracing mechanism for App Services and in addition mechanisms known from innovaphone gateways.&amp;lt;br/&amp;gt;&lt;br /&gt;
You can enable module related trace flags with config change commands or by setting trace flags under Maintenance -&amp;gt; Tracing in the Advanced UI of the App IP.&lt;br /&gt;
&lt;br /&gt;
 Trace files are not found under Maintenance -&amp;gt; Tracing but on the App IP service on your App Platform Manager.&lt;br /&gt;
&lt;br /&gt;
==Known issues==&lt;br /&gt;
The installation process must be performed using a DNS name rather than an IP address. Starting with version 16r1 sr1, installation using an IP address is also supported. &amp;lt;br&amp;gt;&lt;br /&gt;
However, it is generally recommended to use DNS for the installation.&lt;br /&gt;
&lt;br /&gt;
==Related Articles==&lt;br /&gt;
* [[Reference16r1:Concept_innovaphone_App_Platform_Container]]&lt;/div&gt;</summary>
		<author><name>Nfi</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Reference16r1:Concept_innovaphone_App_Platform_Container&amp;diff=79489</id>
		<title>Reference16r1:Concept innovaphone App Platform Container</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Reference16r1:Concept_innovaphone_App_Platform_Container&amp;diff=79489"/>
		<updated>2026-04-16T14:29:45Z</updated>

		<summary type="html">&lt;p&gt;Nfi: /* Related Articles */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The innovaphone App Platform Container provides a myApps App Platform instance that includes the AP Manager, Webserver and PostgreSQL. This container offers a ready-to-use environment for myApps applications and the innovaphone PBX.&lt;br /&gt;
&lt;br /&gt;
== Applies To == &lt;br /&gt;
&lt;br /&gt;
* innovaphone App Platform Container&lt;br /&gt;
&lt;br /&gt;
==Requirements==&lt;br /&gt;
* Host with docker on a x86_64 (amd64) platform&lt;br /&gt;
* innovaphone App Platform Container&lt;br /&gt;
&lt;br /&gt;
==Concept==&lt;br /&gt;
&lt;br /&gt;
The innovaphone App Platform Container provides the innovaphone App Platform for container environments (Open Container Initiative (OCI) format). &lt;br /&gt;
&lt;br /&gt;
* The App Platform Manager and Webserver Apps are already integrated in the container and provide the already known functionality.&lt;br /&gt;
* Apps are installed, updated and managed as usual.&lt;br /&gt;
* The mount point will be used for the database, the App binaries and log files.&lt;br /&gt;
&lt;br /&gt;
==Image Information==&lt;br /&gt;
&lt;br /&gt;
This chapter provides details about the Docker image used for the innovaphone App Platform.&lt;br /&gt;
&lt;br /&gt;
===Repository Details===&lt;br /&gt;
&lt;br /&gt;
;Repository Host : registry.innovaphone.com&lt;br /&gt;
;Image Name : cloud/kubernetes/innovaphone-platform-instance&lt;br /&gt;
&lt;br /&gt;
 registry.innovaphone.com/cloud/kubernetes/innovaphone-platform-instance:latest&lt;br /&gt;
&lt;br /&gt;
===Tagging and Versioning===&lt;br /&gt;
The image is usually tagged with the build number according to innovaphone software releases:&lt;br /&gt;
&lt;br /&gt;
;Latest Tag : Use the latest tag for pulling the most recent service release.&lt;br /&gt;
&lt;br /&gt;
;Release Build Number : For production or version-specific deployments, use a specific build number as the tag (e.g., 130006).&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
 docker pull registry.innovaphone.com/cloud/kubernetes/innovaphone-platform-instance:130006&lt;br /&gt;
&lt;br /&gt;
===Supported Architecture===&lt;br /&gt;
This Docker image supports the &amp;lt;code&amp;gt;linux/amd64&amp;lt;/code&amp;gt; architecture.&lt;br /&gt;
&lt;br /&gt;
===Image Reference===&lt;br /&gt;
An example of a full image reference using a specific release build number would be:&lt;br /&gt;
 registry.innovaphone.com/cloud/kubernetes/innovaphone-platform-instance:130006&lt;br /&gt;
&lt;br /&gt;
==Ports==&lt;br /&gt;
This chapter outlines the various ports exposed by the container. The webserver ports are available immediately upon container startup, after start of the AP Manager and the Webserver, while the additional application ports become active after the app installation. In most cases, a one-to-one mapping is used, meaning the container port is mapped directly to the same host port unless otherwise specified.&lt;br /&gt;
&lt;br /&gt;
===Ports &amp;lt; 1024===&lt;br /&gt;
On most docker hosts, a container won&#039;t be able to use ports below 1024, unless the container is started with higher privileges. &lt;br /&gt;
This shouldn&#039;t be neccessary anyways as all ports can be configured to higher ports.&lt;br /&gt;
&lt;br /&gt;
===Webserver Ports===&lt;br /&gt;
;HTTP:&lt;br /&gt;
Container Port: 8080&lt;br /&gt;
Description: Used for accessing the built-in webserver immediately upon container startup.&lt;br /&gt;
&lt;br /&gt;
;HTTPS:&lt;br /&gt;
Container Port: 8082&lt;br /&gt;
Description: Used for accessing the built-in webserver immediately upon container startup.&lt;br /&gt;
&lt;br /&gt;
=== Additional Application Ports===&lt;br /&gt;
Following additional container ports are avilable depending on installed and configured applications:&lt;br /&gt;
;H323/TLS : 1300&lt;br /&gt;
;SIP : 5060&lt;br /&gt;
;SIPS : 5061&lt;br /&gt;
;LDAPS : 1636&lt;br /&gt;
;SMTP : 8025&lt;br /&gt;
;SMTPS : 8587&lt;br /&gt;
;STUN/TURN : 3478 UDP/TCP&lt;br /&gt;
&#039;&#039;&#039;Additional hint for Portmapping&#039;&#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
docker run -d \&lt;br /&gt;
  --name=innovaphone \&lt;br /&gt;
  --restart unless-stopped \&lt;br /&gt;
  -p 9090:8080 \        #Container Host Port (external) 9090:8080 Container Port&lt;br /&gt;
  -p 9091:8082 \&lt;br /&gt;
  -p 5060:5060 \&lt;br /&gt;
  -p 5061:5061 \&lt;br /&gt;
  -p 1300:1300 \&lt;br /&gt;
  -p 1636:1636 \&lt;br /&gt;
  -p 8025:8025 \&lt;br /&gt;
  -p 8587:8587 \&lt;br /&gt;
  -p 3478:3478 \&lt;br /&gt;
  -p 3478:3478/udp \&lt;br /&gt;
  -v /path/of/data/innovaphone:/mnt/data \      #in this path you will find Apps, DBs &amp;amp; Logs&lt;br /&gt;
                                                #this path musst be used for backups!!&lt;br /&gt;
  -e WEBSERVERPORTHTTP=8080 \&lt;br /&gt;
  -e WEBSERVERPORTHTTPS=8082 \&lt;br /&gt;
  -e LOG_FLAGS=7 \&lt;br /&gt;
  -e LOG_SIZE=1048576 \&lt;br /&gt;
  -e DNSIPV4=8.8.8.8 \&lt;br /&gt;
  -e LIMIT_RAM=512 \        #Ram limit in MB&lt;br /&gt;
  -e LIMIT_DISK=10 \        #disk size in GB&lt;br /&gt;
  -e TZ=Europe/Berlin \&lt;br /&gt;
  registry.innovaphone.com/cloud/kubernetes/innovaphone-platform-instance:latest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Environment Variables (ENVs)==&lt;br /&gt;
This chapter outlines the key environment variables used to configure the behavior of the innovaphone App Platform Container. These variables allow you to customize logging, port settings, resource limits, and more during startup and runtime.&lt;br /&gt;
&lt;br /&gt;
;LOG_FLAGS : Defines the integer representation for the trace flags of the AP Manager, according flags activated under the AP Manager / Diagnostics. See browser console message on Save button press (e.g. &amp;quot;logFlags&amp;quot;:1 , if the &amp;quot;App&amp;quot; flag is activated).&lt;br /&gt;
 LOG_FLAGS=7&lt;br /&gt;
;LOG_SIZE : Specifies the maximum size in bytes for logs before rotation or management actions occur. Default: 5242880.&lt;br /&gt;
 LOG_SIZE=1048576&lt;br /&gt;
;WEBSERVERPORTHTTP : Sets the in-container HTTP port for the webserver. Default: 8080.&lt;br /&gt;
 WEBSERVERPORTHTTP=8080&lt;br /&gt;
;WEBSERVERPORTHTTPS : Sets the in-container HTTPS port for the webserver. Default: 8082.&lt;br /&gt;
 WEBSERVERPORTHTTPS=8443&lt;br /&gt;
;DNSIPV4 : Specifies the in-container DNS server IPv4 address for DNS resolution. Overrides the default container runtime DNS server.&lt;br /&gt;
 DNSIPV4=8.8.8.8&lt;br /&gt;
;DNS_DOMAIN : The FQDN of the App Platform that can be used to access the app services. This optional parameter is used as a static DNS entry added to /etc/hosts. The destination IP address is the resolved IP address behind INTERNAL_DNS_DOMAIN or NAMESPACE.&lt;br /&gt;
 DNS_DOMAIN=ap.example.com&lt;br /&gt;
;INTERNAL_DNS_DOMAIN : The internal FQDN of the App Platform. This FQDN is used to resolve the internal IP address of the App Platform, to be mapped from DNS_DOMAIN in /etc/hosts.&lt;br /&gt;
 INTERNAL_DNS_DOMAIN=my-apps-deployment.my-namespace.svc.cluster.local&lt;br /&gt;
;NAMESPACE : The Kubernetes namespace used to build internal FQDN of the App Platform. Used with DNS_DOMAIN to map it to the IP address of ap.my-namespace.svc.cluster.local.&lt;br /&gt;
 NAMESPACE=my-namespace&lt;br /&gt;
;LIMIT_RAM : Sets the RAM limit for the container, in MB, controlling how much memory it may consume. Used by AP Manager to stop the app instances on overconsumption.&lt;br /&gt;
 LIMIT_RAM=512&lt;br /&gt;
;LIMIT_DISK : Defines the disk space limit in GB for the container to manage storage consumption. Used by AP Manager to stop the app instances on overconsumption.&lt;br /&gt;
 LIMIT_DISK=10&lt;br /&gt;
&lt;br /&gt;
==File limits==&lt;br /&gt;
Containers may have a default file limit per process, e.g. 1024 files. Depending on your installation and usage, this value is too small and you need to allow more, e.g. handing this in the docker run command:&lt;br /&gt;
 --ulimit nofile=500000:500000&lt;br /&gt;
&lt;br /&gt;
==Volumes and Mounts==&lt;br /&gt;
This container uses a dedicated internal mount path for the persistent data management across container restarts and updates.&lt;br /&gt;
&lt;br /&gt;
===Internal Data Volume===&lt;br /&gt;
;Mount Path : &amp;lt;code&amp;gt;/mnt/data&amp;lt;/code&amp;gt;&lt;br /&gt;
;Contents:&lt;br /&gt;
*Apps: Installed application binaries.&lt;br /&gt;
*Databases: PostgreSQL files.&lt;br /&gt;
*Logging: Log files for system and application events.&lt;br /&gt;
&lt;br /&gt;
===Mounting===&lt;br /&gt;
To ensure that your data is preserved, map a host directory or Docker named volume to the container&#039;s /mnt/data path when running the container.&lt;br /&gt;
For example:&lt;br /&gt;
 docker run -d -v /path/on/host:/mnt/data registry.innovaphone.com/cloud/kubernetes/innovaphone-platform-instance:130006&lt;br /&gt;
&lt;br /&gt;
This setup guarantees that your apps, associated data, databases, and logs persist independently of the container lifecycle.&lt;br /&gt;
&lt;br /&gt;
==Entrypoint==&lt;br /&gt;
The container uses a fixed entrypoint:&lt;br /&gt;
 ENTRYPOINT [&amp;quot;/entrypoint.sh&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
This script prepares the container and starts the AP Manager executable.&lt;br /&gt;
&lt;br /&gt;
==Logging and Monitoring==&lt;br /&gt;
The log of the entrypoint.sh and of the AP manager is avilable as conatiner output. The installed applications store the ir log files under &amp;lt;code&amp;gt;/mnt/data/var/log/apps/&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Unexpected high system load ===&lt;br /&gt;
If you encounter a high load, you need to verify whether the load is actually coming from your container. Docker containers always display the load of the physical host system.&lt;br /&gt;
&lt;br /&gt;
It may be that the Docker host itself is also virtualized as an LXC container, and your Docker instances are running within it. In such a setup, the system load of the physical host is displayed because &amp;lt;code&amp;gt;/proc/loadavg&amp;lt;/code&amp;gt; is not isolated per logical layer.&lt;br /&gt;
&lt;br /&gt;
An increased load in the container therefore does not automatically mean that the container itself is the cause or that you have a problem at all. In short: To assess the load, you always need information (e.g., number of CPU cores or I/O information) from the physical host.&lt;br /&gt;
&lt;br /&gt;
==Usage Example==&lt;br /&gt;
 sudo docker run -d --ulimit nofile=500000:500000 --restart unless-stopped --name innovaphoneAP -p 9090:8080 -p 9091:8082 -e WEBSERVERPORTHTTP=8080 -e WEBSERVERPORTHTTPS=8082 -v $(pwd)/myapps/:/mnt/data registry.innovaphone.com/cloud/kubernetes/innovaphone-platform-instance:latest&lt;br /&gt;
&lt;br /&gt;
This command runs the container in detached mode with automatic restart. It names the container innovaphoneAP, maps host ports 9090 and 9091 to the container&#039;s HTTP and HTTPS ports, sets the webserver port environment variables, mounts a host directory to /mnt/data, and starts the AP Manager. After container start up the AP manager web UI is accessible via &amp;lt;code&amp;gt;http://localhost:9090&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;https://localhost:9091&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Related Articles ==&lt;br /&gt;
[https://wiki.innovaphone.com/index.php?title=Howto16r1:Step-by-Step_Docker_Compose_Container_Deployment Step-by-Step Docker Compose Container Deployment]&lt;/div&gt;</summary>
		<author><name>Nfi</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Reference16r1:Concept_innovaphone_App_Platform_Container&amp;diff=79488</id>
		<title>Reference16r1:Concept innovaphone App Platform Container</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Reference16r1:Concept_innovaphone_App_Platform_Container&amp;diff=79488"/>
		<updated>2026-04-16T14:28:21Z</updated>

		<summary type="html">&lt;p&gt;Nfi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The innovaphone App Platform Container provides a myApps App Platform instance that includes the AP Manager, Webserver and PostgreSQL. This container offers a ready-to-use environment for myApps applications and the innovaphone PBX.&lt;br /&gt;
&lt;br /&gt;
== Applies To == &lt;br /&gt;
&lt;br /&gt;
* innovaphone App Platform Container&lt;br /&gt;
&lt;br /&gt;
==Requirements==&lt;br /&gt;
* Host with docker on a x86_64 (amd64) platform&lt;br /&gt;
* innovaphone App Platform Container&lt;br /&gt;
&lt;br /&gt;
==Concept==&lt;br /&gt;
&lt;br /&gt;
The innovaphone App Platform Container provides the innovaphone App Platform for container environments (Open Container Initiative (OCI) format). &lt;br /&gt;
&lt;br /&gt;
* The App Platform Manager and Webserver Apps are already integrated in the container and provide the already known functionality.&lt;br /&gt;
* Apps are installed, updated and managed as usual.&lt;br /&gt;
* The mount point will be used for the database, the App binaries and log files.&lt;br /&gt;
&lt;br /&gt;
==Image Information==&lt;br /&gt;
&lt;br /&gt;
This chapter provides details about the Docker image used for the innovaphone App Platform.&lt;br /&gt;
&lt;br /&gt;
===Repository Details===&lt;br /&gt;
&lt;br /&gt;
;Repository Host : registry.innovaphone.com&lt;br /&gt;
;Image Name : cloud/kubernetes/innovaphone-platform-instance&lt;br /&gt;
&lt;br /&gt;
 registry.innovaphone.com/cloud/kubernetes/innovaphone-platform-instance:latest&lt;br /&gt;
&lt;br /&gt;
===Tagging and Versioning===&lt;br /&gt;
The image is usually tagged with the build number according to innovaphone software releases:&lt;br /&gt;
&lt;br /&gt;
;Latest Tag : Use the latest tag for pulling the most recent service release.&lt;br /&gt;
&lt;br /&gt;
;Release Build Number : For production or version-specific deployments, use a specific build number as the tag (e.g., 130006).&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
 docker pull registry.innovaphone.com/cloud/kubernetes/innovaphone-platform-instance:130006&lt;br /&gt;
&lt;br /&gt;
===Supported Architecture===&lt;br /&gt;
This Docker image supports the &amp;lt;code&amp;gt;linux/amd64&amp;lt;/code&amp;gt; architecture.&lt;br /&gt;
&lt;br /&gt;
===Image Reference===&lt;br /&gt;
An example of a full image reference using a specific release build number would be:&lt;br /&gt;
 registry.innovaphone.com/cloud/kubernetes/innovaphone-platform-instance:130006&lt;br /&gt;
&lt;br /&gt;
==Ports==&lt;br /&gt;
This chapter outlines the various ports exposed by the container. The webserver ports are available immediately upon container startup, after start of the AP Manager and the Webserver, while the additional application ports become active after the app installation. In most cases, a one-to-one mapping is used, meaning the container port is mapped directly to the same host port unless otherwise specified.&lt;br /&gt;
&lt;br /&gt;
===Ports &amp;lt; 1024===&lt;br /&gt;
On most docker hosts, a container won&#039;t be able to use ports below 1024, unless the container is started with higher privileges. &lt;br /&gt;
This shouldn&#039;t be neccessary anyways as all ports can be configured to higher ports.&lt;br /&gt;
&lt;br /&gt;
===Webserver Ports===&lt;br /&gt;
;HTTP:&lt;br /&gt;
Container Port: 8080&lt;br /&gt;
Description: Used for accessing the built-in webserver immediately upon container startup.&lt;br /&gt;
&lt;br /&gt;
;HTTPS:&lt;br /&gt;
Container Port: 8082&lt;br /&gt;
Description: Used for accessing the built-in webserver immediately upon container startup.&lt;br /&gt;
&lt;br /&gt;
=== Additional Application Ports===&lt;br /&gt;
Following additional container ports are avilable depending on installed and configured applications:&lt;br /&gt;
;H323/TLS : 1300&lt;br /&gt;
;SIP : 5060&lt;br /&gt;
;SIPS : 5061&lt;br /&gt;
;LDAPS : 1636&lt;br /&gt;
;SMTP : 8025&lt;br /&gt;
;SMTPS : 8587&lt;br /&gt;
;STUN/TURN : 3478 UDP/TCP&lt;br /&gt;
&#039;&#039;&#039;Additional hint for Portmapping&#039;&#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
docker run -d \&lt;br /&gt;
  --name=innovaphone \&lt;br /&gt;
  --restart unless-stopped \&lt;br /&gt;
  -p 9090:8080 \        #Container Host Port (external) 9090:8080 Container Port&lt;br /&gt;
  -p 9091:8082 \&lt;br /&gt;
  -p 5060:5060 \&lt;br /&gt;
  -p 5061:5061 \&lt;br /&gt;
  -p 1300:1300 \&lt;br /&gt;
  -p 1636:1636 \&lt;br /&gt;
  -p 8025:8025 \&lt;br /&gt;
  -p 8587:8587 \&lt;br /&gt;
  -p 3478:3478 \&lt;br /&gt;
  -p 3478:3478/udp \&lt;br /&gt;
  -v /path/of/data/innovaphone:/mnt/data \      #in this path you will find Apps, DBs &amp;amp; Logs&lt;br /&gt;
                                                #this path musst be used for backups!!&lt;br /&gt;
  -e WEBSERVERPORTHTTP=8080 \&lt;br /&gt;
  -e WEBSERVERPORTHTTPS=8082 \&lt;br /&gt;
  -e LOG_FLAGS=7 \&lt;br /&gt;
  -e LOG_SIZE=1048576 \&lt;br /&gt;
  -e DNSIPV4=8.8.8.8 \&lt;br /&gt;
  -e LIMIT_RAM=512 \        #Ram limit in MB&lt;br /&gt;
  -e LIMIT_DISK=10 \        #disk size in GB&lt;br /&gt;
  -e TZ=Europe/Berlin \&lt;br /&gt;
  registry.innovaphone.com/cloud/kubernetes/innovaphone-platform-instance:latest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Environment Variables (ENVs)==&lt;br /&gt;
This chapter outlines the key environment variables used to configure the behavior of the innovaphone App Platform Container. These variables allow you to customize logging, port settings, resource limits, and more during startup and runtime.&lt;br /&gt;
&lt;br /&gt;
;LOG_FLAGS : Defines the integer representation for the trace flags of the AP Manager, according flags activated under the AP Manager / Diagnostics. See browser console message on Save button press (e.g. &amp;quot;logFlags&amp;quot;:1 , if the &amp;quot;App&amp;quot; flag is activated).&lt;br /&gt;
 LOG_FLAGS=7&lt;br /&gt;
;LOG_SIZE : Specifies the maximum size in bytes for logs before rotation or management actions occur. Default: 5242880.&lt;br /&gt;
 LOG_SIZE=1048576&lt;br /&gt;
;WEBSERVERPORTHTTP : Sets the in-container HTTP port for the webserver. Default: 8080.&lt;br /&gt;
 WEBSERVERPORTHTTP=8080&lt;br /&gt;
;WEBSERVERPORTHTTPS : Sets the in-container HTTPS port for the webserver. Default: 8082.&lt;br /&gt;
 WEBSERVERPORTHTTPS=8443&lt;br /&gt;
;DNSIPV4 : Specifies the in-container DNS server IPv4 address for DNS resolution. Overrides the default container runtime DNS server.&lt;br /&gt;
 DNSIPV4=8.8.8.8&lt;br /&gt;
;DNS_DOMAIN : The FQDN of the App Platform that can be used to access the app services. This optional parameter is used as a static DNS entry added to /etc/hosts. The destination IP address is the resolved IP address behind INTERNAL_DNS_DOMAIN or NAMESPACE.&lt;br /&gt;
 DNS_DOMAIN=ap.example.com&lt;br /&gt;
;INTERNAL_DNS_DOMAIN : The internal FQDN of the App Platform. This FQDN is used to resolve the internal IP address of the App Platform, to be mapped from DNS_DOMAIN in /etc/hosts.&lt;br /&gt;
 INTERNAL_DNS_DOMAIN=my-apps-deployment.my-namespace.svc.cluster.local&lt;br /&gt;
;NAMESPACE : The Kubernetes namespace used to build internal FQDN of the App Platform. Used with DNS_DOMAIN to map it to the IP address of ap.my-namespace.svc.cluster.local.&lt;br /&gt;
 NAMESPACE=my-namespace&lt;br /&gt;
;LIMIT_RAM : Sets the RAM limit for the container, in MB, controlling how much memory it may consume. Used by AP Manager to stop the app instances on overconsumption.&lt;br /&gt;
 LIMIT_RAM=512&lt;br /&gt;
;LIMIT_DISK : Defines the disk space limit in GB for the container to manage storage consumption. Used by AP Manager to stop the app instances on overconsumption.&lt;br /&gt;
 LIMIT_DISK=10&lt;br /&gt;
&lt;br /&gt;
==File limits==&lt;br /&gt;
Containers may have a default file limit per process, e.g. 1024 files. Depending on your installation and usage, this value is too small and you need to allow more, e.g. handing this in the docker run command:&lt;br /&gt;
 --ulimit nofile=500000:500000&lt;br /&gt;
&lt;br /&gt;
==Volumes and Mounts==&lt;br /&gt;
This container uses a dedicated internal mount path for the persistent data management across container restarts and updates.&lt;br /&gt;
&lt;br /&gt;
===Internal Data Volume===&lt;br /&gt;
;Mount Path : &amp;lt;code&amp;gt;/mnt/data&amp;lt;/code&amp;gt;&lt;br /&gt;
;Contents:&lt;br /&gt;
*Apps: Installed application binaries.&lt;br /&gt;
*Databases: PostgreSQL files.&lt;br /&gt;
*Logging: Log files for system and application events.&lt;br /&gt;
&lt;br /&gt;
===Mounting===&lt;br /&gt;
To ensure that your data is preserved, map a host directory or Docker named volume to the container&#039;s /mnt/data path when running the container.&lt;br /&gt;
For example:&lt;br /&gt;
 docker run -d -v /path/on/host:/mnt/data registry.innovaphone.com/cloud/kubernetes/innovaphone-platform-instance:130006&lt;br /&gt;
&lt;br /&gt;
This setup guarantees that your apps, associated data, databases, and logs persist independently of the container lifecycle.&lt;br /&gt;
&lt;br /&gt;
==Entrypoint==&lt;br /&gt;
The container uses a fixed entrypoint:&lt;br /&gt;
 ENTRYPOINT [&amp;quot;/entrypoint.sh&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
This script prepares the container and starts the AP Manager executable.&lt;br /&gt;
&lt;br /&gt;
==Logging and Monitoring==&lt;br /&gt;
The log of the entrypoint.sh and of the AP manager is avilable as conatiner output. The installed applications store the ir log files under &amp;lt;code&amp;gt;/mnt/data/var/log/apps/&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Unexpected high system load ===&lt;br /&gt;
If you encounter a high load, you need to verify whether the load is actually coming from your container. Docker containers always display the load of the physical host system.&lt;br /&gt;
&lt;br /&gt;
It may be that the Docker host itself is also virtualized as an LXC container, and your Docker instances are running within it. In such a setup, the system load of the physical host is displayed because &amp;lt;code&amp;gt;/proc/loadavg&amp;lt;/code&amp;gt; is not isolated per logical layer.&lt;br /&gt;
&lt;br /&gt;
An increased load in the container therefore does not automatically mean that the container itself is the cause or that you have a problem at all. In short: To assess the load, you always need information (e.g., number of CPU cores or I/O information) from the physical host.&lt;br /&gt;
&lt;br /&gt;
==Usage Example==&lt;br /&gt;
 sudo docker run -d --ulimit nofile=500000:500000 --restart unless-stopped --name innovaphoneAP -p 9090:8080 -p 9091:8082 -e WEBSERVERPORTHTTP=8080 -e WEBSERVERPORTHTTPS=8082 -v $(pwd)/myapps/:/mnt/data registry.innovaphone.com/cloud/kubernetes/innovaphone-platform-instance:latest&lt;br /&gt;
&lt;br /&gt;
This command runs the container in detached mode with automatic restart. It names the container innovaphoneAP, maps host ports 9090 and 9091 to the container&#039;s HTTP and HTTPS ports, sets the webserver port environment variables, mounts a host directory to /mnt/data, and starts the AP Manager. After container start up the AP manager web UI is accessible via &amp;lt;code&amp;gt;http://localhost:9090&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;https://localhost:9091&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Related Articles ==&lt;br /&gt;
[https://wiki.innovaphone.com/index.php?title=Howto16r1:Step-by-Step_Docker_Compose_Container_Deployment:Step-by-Step Docker Compose Container Deployment]&lt;/div&gt;</summary>
		<author><name>Nfi</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=File:Ap-container-stepbystep.png&amp;diff=79487</id>
		<title>File:Ap-container-stepbystep.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=File:Ap-container-stepbystep.png&amp;diff=79487"/>
		<updated>2026-04-16T14:26:05Z</updated>

		<summary type="html">&lt;p&gt;Nfi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ap-container-stepbystep.png&lt;/div&gt;</summary>
		<author><name>Nfi</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Howto16r1:Step-by-Step_Docker_Compose_Container_Deployment&amp;diff=79486</id>
		<title>Howto16r1:Step-by-Step Docker Compose Container Deployment</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Howto16r1:Step-by-Step_Docker_Compose_Container_Deployment&amp;diff=79486"/>
		<updated>2026-04-16T14:24:35Z</updated>

		<summary type="html">&lt;p&gt;Nfi: Created page with &amp;quot;&amp;lt;!-- container, docker, oci, compose, linux, app, platform --&amp;gt; Docker Compose Container Deployment  {{HOWTOMOD13r3 Translation Info}} &amp;lt;hr&amp;gt; This guide explains how to structure, configure, and run a container using Docker Compose. It also covers how to update the container image.  File:Ap-container-stepbystep.png  = Docker Compose: Step-by-Step Container Deployment =  This article describes how to deploy and maintain an innovaphone container...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- container, docker, oci, compose, linux, app, platform --&amp;gt;&lt;br /&gt;
[[Category:Step-by-Step|Docker Compose Container Deployment]]&lt;br /&gt;
&lt;br /&gt;
{{HOWTOMOD13r3 Translation Info}}&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
This guide explains how to structure, configure, and run a container using Docker Compose. It also covers how to update the container image.&lt;br /&gt;
&lt;br /&gt;
[[File:Ap-container-stepbystep.png]]&lt;br /&gt;
&lt;br /&gt;
= Docker Compose: Step-by-Step Container Deployment =&lt;br /&gt;
&lt;br /&gt;
This article describes how to deploy and maintain an innovaphone container using Docker Compose.&lt;br /&gt;
&lt;br /&gt;
=== Features ===&lt;br /&gt;
&lt;br /&gt;
* Clear separation of configuration and deployment&lt;br /&gt;
* Centralized configuration using a &#039;&#039;.env&#039;&#039; file&lt;br /&gt;
* Persistent data storage via mounted volumes&lt;br /&gt;
* Easy updates by modifying the container image version&lt;br /&gt;
&lt;br /&gt;
=== Limitations ===&lt;br /&gt;
&lt;br /&gt;
* Each container should be placed in its own directory&lt;br /&gt;
* Changes to variables or image versions require restarting the container&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
&lt;br /&gt;
* Docker installed and running&lt;br /&gt;
* Docker Compose installed&lt;br /&gt;
* Access to the required innovaphone container image&lt;br /&gt;
* Sufficient permissions to create directories and store persistent data&lt;br /&gt;
&lt;br /&gt;
== Things to know before you begin ==&lt;br /&gt;
&lt;br /&gt;
* It is recommended to create a dedicated directory for each container&lt;br /&gt;
* Each container setup requires at least two files:&lt;br /&gt;
** &#039;&#039;.env&#039;&#039;&lt;br /&gt;
** &#039;&#039;docker-compose.yml&#039;&#039;&lt;br /&gt;
* The &#039;&#039;.env&#039;&#039; file contains all configurable variables&lt;br /&gt;
* The &#039;&#039;docker-compose.yml&#039;&#039; file defines the container structure and behavior&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
=== Create container directory ===&lt;br /&gt;
&lt;br /&gt;
Create a dedicated directory for the container config and container persistant data. &lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;/dockerdata/apcontainer&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;/dockerdata/apcontainer/data&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Set ownership ===&lt;br /&gt;
&lt;br /&gt;
Set ownership for your user.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
 chown -R $USER:$USER /dockerdata/apcontainer&lt;br /&gt;
&lt;br /&gt;
=== Create .env file ===&lt;br /&gt;
&lt;br /&gt;
Define all required variables in the &#039;&#039;.env&#039;&#039; file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
WEBSERVERPORTHTTP=8080&lt;br /&gt;
WEBSERVERPORTHTTPS=8082&lt;br /&gt;
LOG_FLAGS=7&lt;br /&gt;
LOG_SIZE=1048576&lt;br /&gt;
DNSIPV4=8.8.8.8&lt;br /&gt;
LIMIT_RAM=512&lt;br /&gt;
LIMIT_DISK=10&lt;br /&gt;
TZ=Europe/Berlin&lt;br /&gt;
&lt;br /&gt;
HOST_PORT_HTTP=9202&lt;br /&gt;
HOST_PORT_HTTPS=9203&lt;br /&gt;
&lt;br /&gt;
DATA_PATH=/dockerdata/apcontainer/data&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Description of .env file variables ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Variable&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| WEBSERVERPORTHTTP&lt;br /&gt;
| Internal HTTP port of the container&lt;br /&gt;
|-&lt;br /&gt;
| WEBSERVERPORTHTTPS&lt;br /&gt;
| Internal HTTPS port of the container&lt;br /&gt;
|-&lt;br /&gt;
| LOG_FLAGS&lt;br /&gt;
| Logging level and options&lt;br /&gt;
|-&lt;br /&gt;
| LOG_SIZE&lt;br /&gt;
| Maximum size of log files&lt;br /&gt;
|-&lt;br /&gt;
| DNSIPV4&lt;br /&gt;
| DNS server used by the container&lt;br /&gt;
|-&lt;br /&gt;
| LIMIT_RAM&lt;br /&gt;
| RAM limit assigned to the container&lt;br /&gt;
|-&lt;br /&gt;
| LIMIT_DISK&lt;br /&gt;
| Disk space limit assigned to the container&lt;br /&gt;
|-&lt;br /&gt;
| TZ&lt;br /&gt;
| Time zone configuration&lt;br /&gt;
|-&lt;br /&gt;
| HOST_PORT_HTTP&lt;br /&gt;
| External HTTP port on the host&lt;br /&gt;
|-&lt;br /&gt;
| HOST_PORT_HTTPS&lt;br /&gt;
| External HTTPS port on the host&lt;br /&gt;
|-&lt;br /&gt;
| DATA_PATH&lt;br /&gt;
| Host path for persistent container data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Optional port mappings ====&lt;br /&gt;
&lt;br /&gt;
The following additional ports can be exposed if required by the application.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Host Port&lt;br /&gt;
! Container Port&lt;br /&gt;
! Protocol&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 9002&lt;br /&gt;
| 80&lt;br /&gt;
| TCP&lt;br /&gt;
| Standard HTTP (RP)&lt;br /&gt;
|-&lt;br /&gt;
| 9004&lt;br /&gt;
| 443&lt;br /&gt;
| TCP&lt;br /&gt;
| Standard HTTPS (RP)&lt;br /&gt;
|-&lt;br /&gt;
| 1300&lt;br /&gt;
| 1300&lt;br /&gt;
| TCP&lt;br /&gt;
| H323/TLS&lt;br /&gt;
|-&lt;br /&gt;
| 1500&lt;br /&gt;
| 5060&lt;br /&gt;
| TCP&lt;br /&gt;
| SIP&lt;br /&gt;
|-&lt;br /&gt;
| 1501&lt;br /&gt;
| 5061&lt;br /&gt;
| TCP&lt;br /&gt;
| SIP/TLS&lt;br /&gt;
|-&lt;br /&gt;
| 636&lt;br /&gt;
| 1636&lt;br /&gt;
| TCP&lt;br /&gt;
| LDAP/TLS&lt;br /&gt;
|-&lt;br /&gt;
| 8025&lt;br /&gt;
| 8025&lt;br /&gt;
| TCP&lt;br /&gt;
| SMTP&lt;br /&gt;
|-&lt;br /&gt;
| 8587&lt;br /&gt;
| 8587&lt;br /&gt;
| TCP&lt;br /&gt;
| SMTP/TLS&lt;br /&gt;
|-&lt;br /&gt;
| 3478&lt;br /&gt;
| 3478&lt;br /&gt;
| TCP/UDP&lt;br /&gt;
| STUN/TURN&lt;br /&gt;
|}&lt;br /&gt;
These ports are optional and only required depending on the recommended service.&lt;br /&gt;
&lt;br /&gt;
To enable them, extend the &#039;&#039;ports&#039;&#039; section in the following &#039;&#039;docker-compose.yml&#039;&#039; file accordingly.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Warning:&#039;&#039;&#039; Each host port can only be used once on a host system. If a port is already in use by another container, the deployment will fail. Always verify port availability before starting the container.&lt;br /&gt;
&lt;br /&gt;
=== Create docker-compose.yml ===&lt;br /&gt;
&lt;br /&gt;
Define the container setup in the &#039;&#039;docker-compose.yml&#039;&#039; file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
services:&lt;br /&gt;
  apcontainer:&lt;br /&gt;
    image: registry.innovaphone.com/cloud/kubernetes/innovaphone-platform-instance:140030&lt;br /&gt;
    container_name: apcontainer&lt;br /&gt;
    restart: unless-stopped&lt;br /&gt;
&lt;br /&gt;
    ports:&lt;br /&gt;
      - &amp;quot;${HOST_PORT_HTTP}:${WEBSERVERPORTHTTP}&amp;quot;&lt;br /&gt;
      - &amp;quot;${HOST_PORT_HTTPS}:${WEBSERVERPORTHTTPS}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
     # Optional ports&lt;br /&gt;
      - &amp;quot;9002:80&amp;quot;&lt;br /&gt;
      - &amp;quot;9004:443&amp;quot;&lt;br /&gt;
      - &amp;quot;1300:1300&amp;quot;&lt;br /&gt;
      - &amp;quot;1500:5060&amp;quot;&lt;br /&gt;
      - &amp;quot;1501:5061&amp;quot;&lt;br /&gt;
      - &amp;quot;636:1636&amp;quot;&lt;br /&gt;
      - &amp;quot;8025:8025&amp;quot;&lt;br /&gt;
      - &amp;quot;8587:8587&amp;quot;&lt;br /&gt;
      - &amp;quot;3478:3478/tcp&amp;quot;&lt;br /&gt;
      - &amp;quot;3478:3478/udp&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    volumes:&lt;br /&gt;
      - ${DATA_PATH}:/mnt/data&lt;br /&gt;
&lt;br /&gt;
    environment:&lt;br /&gt;
      WEBSERVERPORTHTTP: ${WEBSERVERPORTHTTP}&lt;br /&gt;
      WEBSERVERPORTHTTPS: ${WEBSERVERPORTHTTPS}&lt;br /&gt;
      LOG_FLAGS: ${LOG_FLAGS}&lt;br /&gt;
      LOG_SIZE: ${LOG_SIZE}&lt;br /&gt;
      DNSIPV4: ${DNSIPV4}&lt;br /&gt;
      LIMIT_RAM: ${LIMIT_RAM}&lt;br /&gt;
      LIMIT_DISK: ${LIMIT_DISK}&lt;br /&gt;
      TZ: ${TZ}&lt;br /&gt;
&lt;br /&gt;
    ulimits:&lt;br /&gt;
      nofile:&lt;br /&gt;
        soft: 500000&lt;br /&gt;
        hard: 500000&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Set permissions ===&lt;br /&gt;
&lt;br /&gt;
Set permissions for folders and files&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
 chmod 750 /dockerdata/apcontainer&lt;br /&gt;
 chmod 640 /dockerdata/apcontainer/.env&lt;br /&gt;
 chmod 644 /dockerdata/apcontainer/docker-compose.yml&lt;br /&gt;
 chmod 770 /dockerdata/apcontainer/data&lt;br /&gt;
&lt;br /&gt;
=== Start container ===&lt;br /&gt;
&lt;br /&gt;
After creating both files, start the container with:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker compose up -d&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Image Update ==&lt;br /&gt;
&lt;br /&gt;
To update the container, you can first check the available image tags in the registry:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
curl -s https://registry.innovaphone.com/v2/cloud/kubernetes/innovaphone-platform-instance/tags/list&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then modify the image version in the &#039;&#039;docker-compose.yml&#039;&#039; file.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
image: registry.innovaphone.com/cloud/kubernetes/innovaphone-platform-instance:140030&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then recreate and start the container:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker compose up -d&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Verification ==&lt;br /&gt;
&lt;br /&gt;
To verify the deployment, check the following:&lt;br /&gt;
&lt;br /&gt;
* The container is running without errors&lt;br /&gt;
* The configured host ports are accessible&lt;br /&gt;
* The data directory defined in &#039;&#039;DATA_PATH&#039;&#039; is correctly mounted&lt;br /&gt;
* Environment variables are applied correctly&lt;br /&gt;
&lt;br /&gt;
Example command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker compose ps&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
=== Container does not start ===&lt;br /&gt;
&lt;br /&gt;
* Check container logs:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker compose logs -f&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Verify that all variables in the &#039;&#039;.env&#039;&#039; file are correctly defined&lt;br /&gt;
* Ensure the image name and version are valid and accessible&lt;br /&gt;
* Check for syntax errors in &#039;&#039;docker-compose.yml&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Ports are not accessible ===&lt;br /&gt;
&lt;br /&gt;
* Verify that the configured host ports are not already in use:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
netstat -tulnp | grep &amp;lt;PORT&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Ensure firewall rules allow access to the defined ports&lt;br /&gt;
* Confirm correct port mapping in &#039;&#039;docker-compose.yml&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Volume or data issues ===&lt;br /&gt;
&lt;br /&gt;
* Check if the host directory defined in &#039;&#039;DATA_PATH&#039;&#039; exists&lt;br /&gt;
* Verify permissions of the directory:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls -la /dockerdata/apcontainer/data&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Ensure Docker has access rights to the directory&lt;br /&gt;
&lt;br /&gt;
=== Configuration changes are not applied ===&lt;br /&gt;
&lt;br /&gt;
* Restart the container after changes:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker compose down&lt;br /&gt;
docker compose up -d&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Container exits unexpectedly ===&lt;br /&gt;
&lt;br /&gt;
* Inspect logs for errors:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker compose logs&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Check system resource limits (RAM, disk)&lt;br /&gt;
* Verify ulimit settings are supported by the host system&lt;br /&gt;
&lt;br /&gt;
== Related Articles ==&lt;br /&gt;
[https://wiki.innovaphone.com/index.php?title=Reference16r1:Concept_innovaphone_App_Platform_Container Reference16r1:Concept innovaphone App Platform Container]&lt;/div&gt;</summary>
		<author><name>Nfi</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Howto:PHP_based_Update_Server_V2&amp;diff=79392</id>
		<title>Howto:PHP based Update Server V2</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Howto:PHP_based_Update_Server_V2&amp;diff=79392"/>
		<updated>2026-04-02T10:08:23Z</updated>

		<summary type="html">&lt;p&gt;Nfi: /* Using vars create */&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&lt;br /&gt;
* web server running PHP 5 (e.g. Linux Application Platform)&lt;br /&gt;
&lt;br /&gt;
All Versions prior to 13r1 (for 13r1 and later, see [[Reference13r1:Concept App Service Devices]] instead). &lt;br /&gt;
&lt;br /&gt;
By default, the [[Reference10:Concept_Update_Server | Update Manager]] mechanism reads a file that corresponds to the device type (e.g. &amp;lt;code&amp;gt;update-ip222.htm&amp;lt;/code&amp;gt;).  While this makes sense (update scripts may vary by device type), it is sometimes tedious, as you have to edit a huge amount of files which typically are (at least partly) identical.&lt;br /&gt;
&lt;br /&gt;
Here is a PHP script that can be used as an &#039;&#039;Update Server&#039;&#039; that allows you to simplify the handling of update scripts. It also includes a mechanism that makes sure that all devices always have the same firmware installed as a given &#039;&#039;master device&#039;&#039; has.   Finally, it implements a straight forward configuration backup scheme.&lt;br /&gt;
&lt;br /&gt;
This article describes version 2 of this update server (build 2006 and up). The previous version is described in [[Howto:PHP_based_Update_Server]]. The enhancements are&lt;br /&gt;
* Status user interface showing all known devices&lt;br /&gt;
* Ability to roll out custom device certificates&lt;br /&gt;
* Ability to provide configuration files to MTLS-authenticated devices only (e.g. in order to keep certain configuration settings secure)&lt;br /&gt;
* Hide configuration files from public read access&lt;br /&gt;
&lt;br /&gt;
==More Information==&lt;br /&gt;
=== Requirements ===&lt;br /&gt;
The update server script requires a web server with working PHP 5.3 or higher platform.  It has been tested with Apache and ligHTTPD (on a [[Reference10:Concept Linux Application Platform | Linux Application Platform]]).   On IIS, neither the certificate roll-out nor the MTLS authentication or configuration backup works with IIS.&lt;br /&gt;
&lt;br /&gt;
The platform running the PHP scripts must have a valid time setting!&lt;br /&gt;
&lt;br /&gt;
PHP 8 is supported from build 2023.&lt;br /&gt;
&lt;br /&gt;
Needed PHP extension: &amp;lt;code&amp;gt;mbstring, simplexml, soap&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Features ===&lt;br /&gt;
The update server can&lt;br /&gt;
* update all your devices with boot code and firmware that corresponds to the versions running on a reference device of your choice&lt;br /&gt;
* save backups of your devices configuration. Backups are saved only if the configuration changed since the last backup&lt;br /&gt;
* invoke your own update scripts depending on &lt;br /&gt;
** various phases (e.g. you can have &#039;&#039;staging&#039;&#039; scripts which are only executed once and normal scripts which are executed in normal operation later on)&lt;br /&gt;
** devices classes (e.g. you can have different scripts for phones and gateways)&lt;br /&gt;
** environments (e.g. you can have scripts for your internal devices and others for devices in home offices)&lt;br /&gt;
** the device serial number&lt;br /&gt;
* roll out customer specific device certificates&lt;br /&gt;
* roll out update scripts to devices only that have identified themselves with a valid device certificate (MTLS)&lt;br /&gt;
* maintain a list of devices in your installation along with some vital information about each individual device&lt;br /&gt;
&lt;br /&gt;
=== Installation ===&lt;br /&gt;
==== On the Linux Application Platform ====&lt;br /&gt;
Here is how you would install it on the [[Reference10:Concept_Linux_Application_Platform|LAP]].  Some of the steps may not be necessary if you don&#039;t want to use all features.&lt;br /&gt;
&lt;br /&gt;
On the &#039;&#039;Linux Application Platform&#039;&#039;, you would &lt;br /&gt;
* open the LAP&#039;s file system using a SFTP client such as e.g. [https://winscp.net/eng/index.php WinSCP] (if you have not yet changed it, the default credentials will be &amp;lt;code&amp;gt;root/iplinux&amp;lt;/code&amp;gt;, see [[Reference10:Concept_Linux_Application_Platform#Default_Credentials | Concept Linux Application Platform]]). Note that you must use SFTP rather than WebDAV, as WebDAV will not give access to the executable web server files&lt;br /&gt;
* create a new root directory underneath &amp;lt;code&amp;gt;/var/www/innovaphone/mtls&amp;lt;/code&amp;gt;, e.g. &amp;lt;code&amp;gt;/var/www/innovaphone/mtls/update&amp;lt;/code&amp;gt;&lt;br /&gt;
* download the complete file package of scripts and files [https://github.com/innovaphone/php-update-server here] &lt;br /&gt;
* copy all files and directories in to this new directory&lt;br /&gt;
** create your local config files. We will never overwrite these in further updates.&lt;br /&gt;
***Rename &amp;lt;code&amp;gt;config/user-config-sample.xml&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;config/user-config.xml&amp;lt;/code&amp;gt;&lt;br /&gt;
***Rename &amp;lt;code&amp;gt;scripts/all-all-all-sample.txt&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;scripts/all-all-all.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
* change owner and group of all files and directories to &amp;lt;code&amp;gt;www-data&amp;lt;/code&amp;gt;, change mode to 0600 for all files and 0700 for all directories (see [[#Migrating_from_build_2000_an_newer | below]] for how to do this with WinSCP)&lt;br /&gt;
&lt;br /&gt;
* log in to the LAP&#039;s admin UI (if you have not yet changed it, the default credentials will be &amp;lt;code&amp;gt;admin/linux&amp;lt;/code&amp;gt;, see [[Reference10:Concept_Linux_Application_Platform#Default_Credentials | Concept Linux Application Platform]]) and open its &#039;&#039;Administration/Web Server/Change web server properties and public access to the web/webdav&#039;&#039; configuration UI. Add the following paths to &#039;&#039;Public Web Paths&#039;&#039; (assuming your base directory is called &amp;lt;code&amp;gt;update&amp;lt;/code&amp;gt;):&lt;br /&gt;
** &amp;lt;code&amp;gt;/mtls/update&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;/mtls/update/web&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;/mtls/update/admin&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;/mtls/update/fw/&amp;lt;/code&amp;gt; (note the trailing slash!)&lt;br /&gt;
: make sure that no other sub-directories of &#039;&#039;update&#039;&#039; are listed&lt;br /&gt;
: make sure you have no trailing &#039;/&#039; in any of these paths (except &#039;&#039;fw/&#039;)&lt;br /&gt;
: this will make sure the update server&#039;s admin user interface is not accessible to the public&lt;br /&gt;
&lt;br /&gt;
At this point, you should be able to access the update server&#039;s admin user interface, e.g. &amp;lt;code&amp;gt;http://update.yourcompany.com/mtls/update/admin/admin.php&amp;lt;/code&amp;gt;.  However, the only thing you see is a login page.  Please note that your browser should ask you for a password for this page (unless you already entered it before).  Cookies must be enabled for the login page to work properly. &lt;br /&gt;
&lt;br /&gt;
===== If you want to provide HTTPS Acess to the Update Server =====&lt;br /&gt;
For HTTPS access to the update server, you may want to install your own server certificate under &#039;&#039;Administration/Certificates/Current server certificate&#039;&#039;.  However, this is not strictly required (you will experience some warning messages when using your browser to access the update server, however, calling devices will work just fine). &lt;br /&gt;
&lt;br /&gt;
===== If you want to setup MTLS-restricted Delivery of Update Scripts =====&lt;br /&gt;
If you think you have sensitive information in your update scripts, you should make sure to deliver such scripts to your own verified devices only.  This can be done by authenticating calling devices with &#039;&#039;mutual TLS&#039;&#039; (MTLS).  In this case, the calling device must use HTTPS to retrieve the update script and present a trusted client certificate that identifies itself as the calling device (that is, has the device serial as the certificate&#039;s &#039;&#039;common name&#039;&#039; (CN)). &lt;br /&gt;
&lt;br /&gt;
For this feature, you need to &#039;&#039;Configure mutual TLS&#039;&#039; in the LAP&#039;s &#039;&#039;Administration/Web Server&#039;&#039; panel.  Simply tick the &#039;&#039;Active&#039;&#039; check-mark and select an appropriate &#039;&#039;MTLS Port&#039;&#039;.  The port must not conflict with any other TCP port used on the LAP, so neither 80 nor 443 is a good choice.  444 is a good choice.  Although it [http://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml?&amp;amp;page=8 is assigned to the snpp protocol] by IANA, it is not used by the LAP (and probably rarely used anyway).&lt;br /&gt;
&lt;br /&gt;
If MTLS is already activated on your LAP, simply take note of the currently configured &#039;&#039;MTLS Port&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Please note that MTLS access is &#039;&#039;not possible&#039;&#039; through a &#039;&#039;reverse proxy&#039;&#039; (RP).  This is because the RP always will terminate the incoming TLS connection and establish its own to the target.  Therefore, the client certificate presented to the target server is the RP&#039;s certificate, not the original clients certificate.  In our context - where MTLS is used to verify the identity of the original caller - clients must not access the update server through an RP.&lt;br /&gt;
&lt;br /&gt;
You can either expose your update server directly to the internet (and carefully think through the security implications) or create specific TCP port forwarding towards the update server in your NAT-router/firewall.  In this case, we recommend to use non-standard HTTP and HTTPS ports on the NAT router (cause this will already keep most of the HTTP port scanners out there in the internet from functioning).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Also, you will need the public key of all the CAs you will trust.  These must be configured in to the web server so it can trust the certificates your devices will present to it.  See [[#Enforcing_Trust]] for details.&lt;br /&gt;
&lt;br /&gt;
==== On an Apache Server running on the Windows Operating System ====&lt;br /&gt;
The update server will run on Apache too.  However, as we did not test this setup thoroughly, we recommend to use the LAP&#039;s LigHTTPD instead.  &lt;br /&gt;
&lt;br /&gt;
* For hints on using MTLS on an Apache Web Server, see [[Reference10:Concept_Provisioning#Enforcing_mutual_TLS_on_Apache | Enforcing mutual TLS on Apache]]&lt;br /&gt;
* For hints on getting the &#039;&#039;innovaphone device certificate authority&#039;&#039; public keys (which you may or may not need), see [[Reference10:Concept_Provisioning#How_to_get_inno-dev-ca-certificate.crt | How to get inno-dev-ca-certificate.crt ]]&lt;br /&gt;
&lt;br /&gt;
==== On Microsoft&#039;s IIS ====&lt;br /&gt;
We do not recommend to use IIS as &lt;br /&gt;
* it does not support PUT easily&lt;br /&gt;
* it is not compatible with the innovaphone device&#039;s MTLS implementation&lt;br /&gt;
&lt;br /&gt;
===Update existing installation===&lt;br /&gt;
&lt;br /&gt;
* download the [https://github.com/innovaphone/php-update-server new sources]&lt;br /&gt;
* copy all files and directories to your existing installation folder (overwrite existing files)&lt;br /&gt;
* change owner and group of all files and directories to www-data, change mode to 0600 for all files and 0700 for all directories&lt;br /&gt;
&lt;br /&gt;
===Configuration===&lt;br /&gt;
&lt;br /&gt;
If you intend to deliver your update scripts with MTLS (that is, with HTTPS and mutual certificate check)&lt;br /&gt;
* you will need to have the full name of your &#039;&#039;certificate Authority&#039;&#039; (CA) as it is noted as &#039;&#039;Common Name&#039;&#039; (CN) in your CA&#039;s certificate&lt;br /&gt;
* also, you will need a PEM version of your CA&#039;s public key (a &#039;&#039;PEM version&#039;&#039; of a certificate is a text file that begins with a line like &amp;lt;code&amp;gt;-----BEGIN CERTIFICATE-----&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Also, you need to know the &#039;&#039;MTLS Port&#039;&#039; configured in your LAP (see [[#If_you_want_to_setup_MTLS-restricted_Delivery_of_Update_Scripts| If you want to setup MTLS-restricted Delivery of Update Scripts ]] above).&lt;br /&gt;
&lt;br /&gt;
All tweakable parameters are set in &amp;lt;code&amp;gt;user-config.xml&amp;lt;/code&amp;gt;.  You may want to use an XML-capable editor such as notepad++, netbeans or Visual-Studio for editing.  if your editor supports it, you benefit from the &#039;&#039;document type description&#039;&#039; (DTD) provided in &amp;lt;code&amp;gt;full-config.dtd&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&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;!DOCTYPE config SYSTEM &amp;quot;full-config.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- add your local configuration here --&amp;gt;&lt;br /&gt;
&amp;lt;config debugmerge=&amp;quot;false&amp;quot; debugcerts=&amp;quot;false&amp;quot; debugscript=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/config&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The attributes of the &amp;lt;code&amp;gt;config&amp;lt;/code&amp;gt; tag control some aspects of debugging.  For now, simply set all 3 to &amp;lt;code&amp;gt;&amp;quot;true&amp;quot;&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;&amp;quot;false&amp;quot;&amp;lt;/code&amp;gt;.  Do not forget to revert them back to &amp;lt;code&amp;gt;&amp;quot;false&amp;quot;&amp;lt;/code&amp;gt; when everything runs smoothly, large log files will result if not. &lt;br /&gt;
&lt;br /&gt;
==== Securing Access ====&lt;br /&gt;
To control access to the update server&#039;s data, you should set a login.  This can be done in the &#039;&#039;master&#039;&#039; tag by specifying both &#039;&#039;user&#039;&#039; and &#039;&#039;password&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;master ...  user=&amp;quot;myadmin&amp;quot; password=&amp;quot;mysecret&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Default username and password are admin/password.&lt;br /&gt;
&lt;br /&gt;
==== Delivering Firmware and Boot Code ====&lt;br /&gt;
At this point, you can simulate a device by requesting an update script using an URL like &amp;lt;code&amp;gt;http://update.yourcompany.com/mtls/update/update.php?type=IP232&amp;amp;sn=00-90-33-00-00-00&amp;amp;hwid=IP232-00-00-00&amp;amp;ip=1.2.3.4&amp;lt;/code&amp;gt; in your browser (please note that this URL should not ask you for a password).  Most likely, your browser will wait a little while and then say something like:&lt;br /&gt;
&lt;br /&gt;
 ...&lt;br /&gt;
 # failed to use cached data (cache not current), retrieving info online&lt;br /&gt;
 # cannot get PBX info: cannot access http://yourmasterdevice.youdomain.tld/CMD0/box_info.xml, reading cache&lt;br /&gt;
 # cannot get cached PBX info: cannot access cache/master-info.xml - exit&lt;br /&gt;
&lt;br /&gt;
This is because you did not yet specify the &#039;&#039;master device&#039;&#039; which always runs the reference firmware.  &lt;br /&gt;
&lt;br /&gt;
The idea here is that you have one innovaphone device in your system where the firmware is always manually updated. All other devices shall follow this reference firmware.  The update server will deliver the firmware that runs on the master device to calling devices.  For this to work, you need to set the &#039;&#039;info&#039;&#039; attribute of the [[#master|&#039;&#039;master&#039;&#039;]] tag and leave everything else &#039;&#039;as is&#039;&#039;.  &lt;br /&gt;
&lt;br /&gt;
Remember that you do all your local configuration changes in &amp;lt;code&amp;gt;user-config.xml&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
As &#039;&#039;master&#039;&#039; is a first level tag, you can add it directly underneath the opening &#039;&#039;&amp;lt;config&amp;gt;&#039;&#039; tag.  The only thing we need to define right now is the path to read the firmware information from your master device.  Let&#039;s say your reference device has the IP address &amp;lt;code&amp;gt;172.16.0.10&amp;lt;/code&amp;gt;, you end up with &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&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;!DOCTYPE config SYSTEM &amp;quot;full-config.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- add your local configuration here --&amp;gt;&lt;br /&gt;
&amp;lt;config debugmerge=&amp;quot;true&amp;quot; debugcerts=&amp;quot;true&amp;quot; debugscript=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;master info=&amp;quot;http://172.16.0.10/CMD0/box_info.xml&amp;quot;  user=&amp;quot;myadmin&amp;quot; password=&amp;quot;mysecret&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/config&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
(you could use a DNS name instead of the IP address of course). &lt;br /&gt;
The &#039;&#039;info&#039;&#039; URL is used by the update server itself only, it is never used by devices requesting an update script.&lt;br /&gt;
&lt;br /&gt;
When you refresh the page that simulates a device requesting an update script, the output should now change to something like&lt;br /&gt;
&lt;br /&gt;
 ...&lt;br /&gt;
 # failed to use cached data (cache not current), retrieving info online&lt;br /&gt;
 # current firmware (unknown) does not match required firmware (130178)&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
This is to say that your master device runs firmware 130178 and the calling device does not (actually, as the calling client is simulated by your browser, it does not transmit its current firmware to the update server so it is &#039;&#039;(unknown)&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
In order to actually update the clients with firmware and boot code, the files must be made available to the calling client somehow.  This is done by specifying an URL in the [[Reference10:Concept_Update_Server#Prot_command | prot ]] and [[Reference10:Concept_Update_Server#Boot_command | boot ]] commands sent to the calling device:&lt;br /&gt;
&lt;br /&gt;
 ...&lt;br /&gt;
 # current firmware (unknown) does not match required firmware (130178)&lt;br /&gt;
 mod cmd UP0 prot http://update.yourcompany.com/mtls/update/fw/130178/ ser 130178&lt;br /&gt;
 # current boot code (unknown) does not match required boot code (130112)&lt;br /&gt;
 mod cmd UP0 boot http://update.yourcompany.com/mtls/update/fw/130112/ ser 130112&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
By default, the URL generated points to a sub-directory of your update server called &#039;&#039;fw&#039;&#039;: &amp;lt;code&amp;gt;http://update.yourcompany.com/mtls/update/fw/130178/&amp;lt;/code&amp;gt;.  Note that this default URL expects sub-directories underneath the &#039;&#039;fw&#039;&#039; directory which correspond to the firmware and boot code build number.  The file structure thus would be like&lt;br /&gt;
&lt;br /&gt;
 /var/www/innovaphone/mtls/update/fw&lt;br /&gt;
                                    /130178&lt;br /&gt;
                                           /ip232.bin&lt;br /&gt;
                                    /130112&lt;br /&gt;
                                           /boot232.bin&lt;br /&gt;
&lt;br /&gt;
Note that the URL ends with a slash (&amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt;).  This instructs the calling device to append the appropriate file name itself when retrieving the file (see [[Reference10:Concept_Update_Server#Prot_command | the prot command ]] for details). &lt;br /&gt;
&lt;br /&gt;
However, you can also specify any other URL by setting the &#039;&#039;url&#039;&#039; attribute in the &#039;&#039;fwstorage&#039;&#039; tag of your &amp;lt;code&amp;gt;user-config.xml&amp;lt;/code&amp;gt;. In this attribute, certain meta words will be replaced (see [[#fwstorage | the &#039;&#039;fwstorage&#039;&#039; tag ]] for details).  The default setting for example is &amp;lt;code&amp;gt;fw/{build}/&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
You can disable firmware and boot code updates altogether by setting the &#039;&#039;info&#039;&#039; attribute in the &#039;&#039;master&#039;&#039; tag to an empty value.&lt;br /&gt;
&lt;br /&gt;
==== Your own Update Script Files ====&lt;br /&gt;
The update server will deliver update scripts to calling devices which are synthesized from a number of &#039;&#039;update script snippets&#039;&#039; which you define yourself.  The idea is that many devices share parts of their configuration while other parts are different.  This depends on&lt;br /&gt;
* the device &#039;&#039;class&#039;&#039; (e.g. a phone or a gateway)&lt;br /&gt;
: the device class is automatically derived from its model.  In fact, a single device may be in multiple classes. For example, an IP232 is in these classes: &#039;&#039;phone, pre_opus_phone, phone_newui&#039;&#039; which basically says that its a phone and has no OPUS codec yet but a &amp;quot;new&amp;quot; user interface (as opposed to the old one found e.g. on an IP110). A number of useful classes are pre-defined, but you can add your own in &amp;lt;code&amp;gt;user-config.xml&amp;lt;/code&amp;gt;.&lt;br /&gt;
* the device&#039;s environment (e.g. &#039;&#039;home-office&#039;&#039;, &#039;&#039;branch-office&#039;&#039;)&lt;br /&gt;
:  These reflect the fact that devices may need different configuration if they are in different locations (or environments).  The update server does not know about a device&#039;s environment, which is why you need to configure it in to the devices update URL if you need this.  By default, there is a single environment defined called &#039;&#039;default&#039;&#039;, but of course, you can add your own&lt;br /&gt;
* phase&lt;br /&gt;
: configuring devices may need multiple phases to go through.  If more than one phase is defined, the device will go through all phases sequentially, which is why a &#039;&#039;phase&#039;&#039; has a numerical &#039;&#039;seq&#039;&#039; attribute.  Phases are went through in order of this attribute. When the device has reached the last phase, it will stay there.  By default, there is only one phase called &#039;&#039;update&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You can define update script snippets for any combination of device, environment and phase.  You do so simply by placing appropriate files in to the &#039;&#039;scripts&#039;&#039; directory on your update server.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s have a closer look at the web page we used to simulate a device calling for an update script before (&amp;lt;code&amp;gt;http://update.yourcompany.com/mtls/update/update.php?type=IP232&amp;amp;sn=00-90-33-00-00-00&amp;amp;hwid=IP232-00-00-00&amp;amp;ip=1.2.3.4&amp;lt;/code&amp;gt;).  It will show you all the possible files it would deliver to the device:&lt;br /&gt;
&lt;br /&gt;
 # possible files (from scripts):&lt;br /&gt;
 # scripts/update-all-00_90_33_00_00_00.txt does not exist&lt;br /&gt;
 # scripts/update-all-default.txt does not exist&lt;br /&gt;
 # scripts/update-phone-00_90_33_00_00_00.txt does not exist&lt;br /&gt;
 # scripts/update-phone-default.txt does not exist&lt;br /&gt;
 # scripts/update-pre_opus_phone-00_90_33_00_00_00.txt does not exist&lt;br /&gt;
 # scripts/update-pre_opus_phone-default.txt does not exist&lt;br /&gt;
 # scripts/update-phone_newui-00_90_33_00_00_00.txt does not exist&lt;br /&gt;
 # scripts/update-phone_newui-default.txt does not exist&lt;br /&gt;
&lt;br /&gt;
The update script snippet files need to have proper names to define when they should be delivered.  As you can see, they all start with &amp;lt;code&amp;gt;update-&amp;lt;/code&amp;gt; which means that they apply to devices which are in the &#039;&#039;update&#039;&#039; phase.  As by default there is only a single phase defined, all possible file names start with &amp;lt;code&amp;gt;update-&amp;lt;/code&amp;gt;.  &lt;br /&gt;
&lt;br /&gt;
The next part here is either &amp;lt;code&amp;gt;phone-&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;pre_opus_phone-&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;phone_newui-&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;all-&amp;lt;/code&amp;gt;.  This is because the calling IP232 is in three classes, so all respective snippets will be delivered to it.  &#039;&#039;all&#039;&#039; however is a wild-card.  That is, such files will be delivered to all devices, no matter what class they are in.  You may wonder why there was no &#039;&#039;all&#039;&#039; for the phase.  This is because there is only a single phase defined.  If there would be more, the &#039;&#039;all&#039;&#039;-variation of the phase-part  of the file name would be appear.&lt;br /&gt;
&lt;br /&gt;
The third part finally is either &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;00_90_33_00_00_00&amp;lt;/code&amp;gt; in our case. &#039;&#039;default&#039;&#039; is the name of the only &#039;&#039;environment&#039;&#039; that is defined by default.  &#039;&#039;00_90_33_00_00_00&#039;&#039; is the device&#039;s serial number which is treated as an implicitly defined environment name. This allows you to deliver certain snippets to a single device only.&lt;br /&gt;
&lt;br /&gt;
Now let&#039;s create an update script snippet that is delivered to all phones in the default environment when they are in the update phase.  The file name (which looks like &#039;&#039;phase&#039;&#039;&amp;lt;code&amp;gt;-&amp;lt;/code&amp;gt;&#039;&#039;class&#039;&#039;&amp;lt;code&amp;gt;-&amp;lt;/code&amp;gt;&#039;&#039;environment&#039;&#039;&amp;lt;code&amp;gt;.txt&amp;lt;/code&amp;gt;) has to be &amp;lt;code&amp;gt;update-phone-default.txt&amp;lt;/code&amp;gt; therefore.  Just for an exercise, let us set the device name (as shown in the browser&#039;s title bar) to &#039;&#039;This is a Phone!&#039;&#039;.&lt;br /&gt;
The command to do so is &amp;lt;code&amp;gt;config add CMD0 /name This+is+a+Phone%21&amp;lt;/code&amp;gt;, so your file may look like this&lt;br /&gt;
&lt;br /&gt;
 # set the device name&lt;br /&gt;
 config add CMD0 /name This+is+a+Phone%21&lt;br /&gt;
&lt;br /&gt;
(btw: did you observe that config line arguments need to be url-encoded?).  Now create the file and upload it in to the &#039;&#039;scripts&#039;&#039; directory of you update server.  When you now refresh the page which simulates the device calling for an update script, you will see something like this:&lt;br /&gt;
&lt;br /&gt;
 ...&lt;br /&gt;
 # newest script (scripts/update-phone-default.txt) 11s old&lt;br /&gt;
 # files being updated (scripts/update-phone-default.txt 11s old, waiting for at least 90s to expire)&lt;br /&gt;
&lt;br /&gt;
When you update multiple script snippets, it is often undesirable that a device retrieves an inconsistent state of the scripts you are working on (e.g. if you already have saved one but not yet the other).  To avoid this, the update server will look at the files modification dates and if one of those that needs to be delivered to the device is younger than 90 seconds, it will not send any of them at all.  &lt;br /&gt;
&lt;br /&gt;
So when you wait for the 90 seconds to pass and refresh the page again, you will see something like this:&lt;br /&gt;
&lt;br /&gt;
 # firmware build info cache is current&lt;br /&gt;
 # phase: update, nextphase: , environment: default, type: IP232, classes: phone+pre_opus_phone+phone_newui&lt;br /&gt;
 # possible files (from scripts):&lt;br /&gt;
 ...&lt;br /&gt;
 # scripts/update-phone-default.txt 4.1 mins&lt;br /&gt;
 ...&lt;br /&gt;
 #     scripts/update-phone-default.txt&lt;br /&gt;
 # { begin script &#039;scripts/update-phone-default.txt&#039; &lt;br /&gt;
 # set the device name&lt;br /&gt;
 config add CMD0 /name This+is+a+Phone%21&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 # end script &#039;scripts/update-phone-default.txt&#039; }&lt;br /&gt;
 &lt;br /&gt;
 # trigger reset if required&lt;br /&gt;
 config write&lt;br /&gt;
 config activate&lt;br /&gt;
 iresetn&lt;br /&gt;
&lt;br /&gt;
As you can see, your snippet has been delivered by the update script.  However, the update server has also added some trailing commands which write back the config to the devices flash memory (&amp;lt;code&amp;gt;config write&amp;lt;/code&amp;gt;), activate it (&amp;lt;code&amp;gt;config activate&amp;lt;/code&amp;gt;) and trigger a reset if needed (&amp;lt;code&amp;gt;iresetn&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
If there are multiple snippets available for a calling device, all of them are concatenated in the sequence shown in the header of the returned script (where the possible file names are listed)&lt;br /&gt;
&lt;br /&gt;
==== Device Status ====&lt;br /&gt;
When you have a lot of devices which are served by the update server, you may want to have a list of these devices along with some useful information regarding each devices.  &lt;br /&gt;
&lt;br /&gt;
You can enable this by defining the &#039;&#039;status&#039;&#039; tag in your &amp;lt;code&amp;gt;user-config.xml&amp;lt;/code&amp;gt;.  So open the file and add the tag right next to the &#039;&#039;master&#039;&#039; tag you added before:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&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;!DOCTYPE config SYSTEM &amp;quot;full-config.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- add your local configuration here --&amp;gt;&lt;br /&gt;
&amp;lt;config&amp;gt;&lt;br /&gt;
    &amp;lt;master info=&amp;quot;http://172.16.0.10/CMD0/box_info.xml&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;status&lt;br /&gt;
        dir=&amp;quot;status&amp;quot;&lt;br /&gt;
    /&amp;gt;&lt;br /&gt;
&amp;lt;/config&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When you have done so, please refresh the page that simulates your calling device and then open &amp;lt;code&amp;gt;http://update.yourcompany.com/mtls/update/admin/admin.php?mode=status&amp;lt;/code&amp;gt;.  You will now see a device list (well, a list with a single device, the one you simulated using your browser).   The list will show some information regarding the devices that requested an update script lately.   For more options, see [[#status]].&lt;br /&gt;
&lt;br /&gt;
==== Device Backup ====&lt;br /&gt;
It is generally useful to have recent backups of all of your device configurations.  The update server supports that if you enable it by defining the &#039;&#039;backup&#039;&#039; tag in your &amp;lt;code&amp;gt;user-config.xml&amp;lt;/code&amp;gt;. Simply put it right next to the &#039;&#039;master&#039;&#039; or &#039;&#039;status&#039;&#039; tag you added before:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
    &amp;lt;backup&lt;br /&gt;
        dir=&amp;quot;backup&amp;quot;&lt;br /&gt;
    /&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you have done so and then refresh the page that simulates your calling device, you will now see &lt;br /&gt;
&lt;br /&gt;
 ...&lt;br /&gt;
 # scripts/update-phone_newui-default.txt does not exist&lt;br /&gt;
 &lt;br /&gt;
 mod cmd UP0 scfg http://update.yourcompany.com/mtls/update/update.php?mode=backup&amp;amp;hwid=#h&amp;amp;sn=#m&lt;br /&gt;
&lt;br /&gt;
instead of &lt;br /&gt;
&lt;br /&gt;
 ...&lt;br /&gt;
 # scripts/update-phone_newui-default.txt does not exist&lt;br /&gt;
 &lt;br /&gt;
 # Backups not enabled in config&lt;br /&gt;
&lt;br /&gt;
When a client requests an update script the next time, this will initiate a configuration backup which is stored underneath the &#039;&#039;backup&#039;&#039; directory.  For each device, a sub-directory is created and all backup files are stored therein.  By default, the last 10 differing configuration backups are kept.&lt;br /&gt;
&lt;br /&gt;
==== Controlling the Time-frames when Snippets are delivered ====&lt;br /&gt;
The update client built-in to innovaphone devices allows to restrict updates to certain time frames (e.g. only during the night). This can be controlled using the [[Reference10:Concept_Update_Server#Times_command | times ]] command.&lt;br /&gt;
&lt;br /&gt;
You can configure the update server to use the time commands by setting the &#039;&#039;allow&#039;&#039; and &#039;&#039;initial&#039;&#039; attributes in the &#039;&#039;times&#039;&#039; tag in your &amp;lt;code&amp;gt;user-config.xml&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;times &lt;br /&gt;
        allow=&amp;quot;22,23,0,1,2,3,4&amp;quot; &lt;br /&gt;
        initial=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If either the &#039;&#039;allow&#039;&#039; or &#039;&#039;initial&#039;&#039; attribute is present, the update script will contain a line like&lt;br /&gt;
&lt;br /&gt;
 ...&lt;br /&gt;
 # Restricted times&lt;br /&gt;
 mod cmd UP1 times  /allow 22,23,0,1,2,3,4 /initial 1&lt;br /&gt;
&lt;br /&gt;
In the example above, all update script activity will occur only between 10pm and 5am (local device time).   For more details, see [[Reference10:Concept_Update_Server#Times_command | Concept Update Server]]&lt;br /&gt;
&lt;br /&gt;
==== Using and Enforcing HTTPS ====&lt;br /&gt;
Your devices can either use HTTP or HTTPS to access the update server.  In normal operation, the update server will generate URLs (e.g. the URLs used to retrieve firmware or to backup configurations) for the same protocol.  &lt;br /&gt;
&lt;br /&gt;
However, you can enforce use of HTTPS by setting the &#039;&#039;forcehttps&#039;&#039; attribute in the [[Howto:PHP_based_Update_Server_V2#times | &#039;&#039;times&#039;&#039; ]] tag to &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt;. If so, a device calling in with HTTP will be re-configured to use HTTPS:&lt;br /&gt;
&lt;br /&gt;
 ...&lt;br /&gt;
 # using HTTP and &#039;forcehttps&#039; is set -&amp;gt; need to switch to HTTPS&lt;br /&gt;
 &lt;br /&gt;
 # changed state query args: polling, phase&lt;br /&gt;
 # new url=https://update.yourcompany.com/mtls/update/update.php?polling=5&amp;amp;phase=&amp;amp;type=#t&amp;amp;sn=#m&amp;amp;hwid=#h&amp;amp;ip=#i&lt;br /&gt;
 ...&lt;br /&gt;
(note that if you are using a non-standard port for HTTPS, you must define it using the &#039;&#039;httpsport&#039;&#039; attribute).&lt;br /&gt;
&lt;br /&gt;
==== Delivering Custom Certificates ====&lt;br /&gt;
innovaphone devices come with pre-defined, trustworthy device certificates. However, all &#039;&#039;soft&#039;&#039; devices (such as the softwarephone, myPBX for Android/iOS or the IPVA) do not.  Also, in many scenarios customers run their own &#039;&#039;public key infrastructure&#039;&#039; (PKI) and request their own certificates to be used instead of the pre-defined. This is why there is a need to roll-out custom certificates to devices. &lt;br /&gt;
&lt;br /&gt;
The update server supports this task to an extend.  It can&lt;br /&gt;
* check if a calling device has a proper certificate&lt;br /&gt;
* instruct a calling device without proper certificate to create a &#039;&#039;certificate signing request&#039;&#039; (CSR)&lt;br /&gt;
* download the CSR to the update server for easy access by the administrator&lt;br /&gt;
* upload a signed CSR to the device&lt;br /&gt;
* upload the public key(s) of the CA in to the device&#039;s trust list&lt;br /&gt;
&lt;br /&gt;
In order to roll-out custom certificates with the update server, the administrator needs to&lt;br /&gt;
* run his own PKI (a.k.a. &#039;&#039;certificate authority&#039;&#039; (CA))&lt;br /&gt;
* monitor CSRs that appear in the update server&#039;s device list&lt;br /&gt;
* approve the request by manually submitting it to his own CA&lt;br /&gt;
* upload the signed CSR to the update server&lt;br /&gt;
&lt;br /&gt;
Also, all devices must run &#039;&#039;V12r1 SR8&#039;&#039; or newer before the new certificate can be uploaded.  Devices with older firmware will be updated automatically (see [[#Delivering_Firmware_and_Boot_Code]] above). However, the new firmware must be &#039;&#039;V12r1 SR8&#039;&#039; or later. &lt;br /&gt;
&lt;br /&gt;
To learn how you can create proper device certificates with your own windows CA, see [[Howto:Creating custom Certificates using a Windows Certificate Authority]].&lt;br /&gt;
&lt;br /&gt;
By default, custom certificates are turned off and you will see a note like&lt;br /&gt;
&lt;br /&gt;
 # certificates: either certificate handling or state tracking not enabled - not doing any certificate checking&lt;br /&gt;
&lt;br /&gt;
in the delivered update script.&lt;br /&gt;
&lt;br /&gt;
Custom certificates are turned on by adding a &#039;&#039;customcerts&#039;&#039; tag to your &amp;lt;code&amp;gt;user-config.xml&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
    &amp;lt;customcerts&lt;br /&gt;
	dir=&amp;quot;certs&amp;quot;&lt;br /&gt;
    /&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The page that simulates your calling device will now include a line saying:&lt;br /&gt;
&lt;br /&gt;
 # certificates: we dont know anything about the current certificate state - not doing any certificate checking &lt;br /&gt;
&lt;br /&gt;
In order to decide if or if not a calling device has a valid certificate, the device needs to send its current public key to the update server.  This is done by enabling &#039;&#039;queries&#039;&#039; in your &amp;lt;code&amp;gt;user-config.xml&amp;lt;/code&amp;gt;.  &#039;&#039;Queries&#039;&#039; is a means to have the device submit certain information to the update server.  In the update server&#039;s default configuration, two queries are defined but not enabled:&lt;br /&gt;
&lt;br /&gt;
* the query &#039;&#039;certificates&#039;&#039; sends the current certificate state &lt;br /&gt;
* the query &#039;&#039;admin&#039;&#039; sends the current device name (as set in &#039;&#039;General/Admin&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
To enable a query, you must specify the class a calling device must be in in order to execute the query.  This is done by adding an &#039;&#039;applies&#039;&#039; tag for the respective query in your configuration:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
    &amp;lt;queries&amp;gt;&lt;br /&gt;
        &amp;lt;query id=&amp;quot;admin&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;applies&amp;gt;*&amp;lt;/applies&amp;gt;&lt;br /&gt;
        &amp;lt;/query&amp;gt;&lt;br /&gt;
        &amp;lt;query id=&amp;quot;certificates&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;applies&amp;gt;*&amp;lt;/applies&amp;gt;&lt;br /&gt;
        &amp;lt;/query&amp;gt;&lt;br /&gt;
    &amp;lt;/queries&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This basically says that both queries should be executed by devices of just any class.  Unless you enable queries, your update script will include lines such as:&lt;br /&gt;
&lt;br /&gt;
 # no queries defined for any of callers classes: phone+pre_opus_phone+phone_newui&lt;br /&gt;
&lt;br /&gt;
Once you have enabled them, you will see something like&lt;br /&gt;
&lt;br /&gt;
 ...&lt;br /&gt;
 # query &#039;certificates&#039;&lt;br /&gt;
 mod cmd UP0 scfg https://update.yourcompany.com/mtls/update/update.php?mode=query&amp;amp;sn=#m&amp;amp;id=certificates ser nop /always mod%20cmd%20X509%20xml-info&lt;br /&gt;
 # query &#039;admin&#039;&lt;br /&gt;
 mod cmd UP0 scfg https://update.yourcompany.com/mtls/update/update.php?mode=query&amp;amp;sn=#m&amp;amp;id=admin ser nop /always mod%20cmd%20CMD0%20xml-info&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
You can display the data sent by a query in the device status display.  To do so, you need to define one or more &#039;&#039;show&#039;&#039; tags as part of the respective &#039;&#039;query&#039;&#039; tag:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
        ...&lt;br /&gt;
        &amp;lt;query id=&amp;quot;certificates&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;applies&amp;gt;*&amp;lt;/applies&amp;gt;&lt;br /&gt;
            &amp;lt;!-- show device certificate CNs and Issuer CNs in status page --&amp;gt;&lt;br /&gt;
            &amp;lt;show title=&amp;quot;Subject&amp;quot;&amp;gt;/state/queries/certificates/info/servercert/certificate/@subject_cn&amp;lt;/show&amp;gt;&lt;br /&gt;
            &amp;lt;show title=&amp;quot;Issuer&amp;quot;&amp;gt;/state/queries/certificates/info/servercert/certificate/@issuer_cn&amp;lt;/show&amp;gt;&lt;br /&gt;
        &amp;lt;/query&amp;gt;&lt;br /&gt;
        ...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Two steps however are still missing: &lt;br /&gt;
&lt;br /&gt;
* a) you need to tell the update server the names of all the CAs you consider trustworthy.  This is done by listing their names in the &#039;&#039;CAname&#039;&#039; attribute of the &#039;&#039;customcerts&#039;&#039; tag:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
    ...&lt;br /&gt;
    &amp;lt;customcerts&lt;br /&gt;
        dir=&amp;quot;certs&amp;quot;&lt;br /&gt;
        CAname=&amp;quot;innovaphone Device Certification Authority,innovaphone Device Certification Authority 2,innovaphone-INNO-DC-W2K8-Zertifizierungsserver&amp;quot;&lt;br /&gt;
    /&amp;gt;&lt;br /&gt;
    ...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: The example shown defines that you will accept both of innovaphone&#039;s device certificate authorities and also your own CA called &#039;&#039;innovaphone-INNO-DC-W2K8-Zertifizierungsserver&#039;&#039;.  Devices with device certificates issued by one of these CAs will be left untouched.  For all other devices (for example, any &#039;&#039;myPBX for Android/iOS&#039;&#039; device that has a self-signed certificate), the generation of a custom certificate will be initiated.&lt;br /&gt;
&lt;br /&gt;
* And b) you need to provide the public key of your CA (so it can be uploaded to the calling device&#039;s trust list).  You need to place the DER (not PEM) encoded public key in to a file called &amp;lt;code&amp;gt;certs/CAkey-01.cer&amp;lt;/code&amp;gt; on your update server (if you want to upload the whole certificate chain, put all of the public keys in the chain in to separate additional files called &amp;lt;code&amp;gt;certs/CAkey-02.cer&amp;lt;/code&amp;gt; and so forth.&lt;br /&gt;
&lt;br /&gt;
For more details on how to approve certificate signing requests, see [[#Approving Certificate Signing Requests]] below.&lt;br /&gt;
&lt;br /&gt;
==== Enforcing Trust ====&lt;br /&gt;
Update script snippets may include sensitive information which you do not want to disclose to the public.  Even though you can force the use of HTTPS (see above), this still does not keep your data secure.  After all, an attacker could simply request an update script from your update server using HTTPS.  To secure your data, you need to make sure that snippets are only sent to devices which identify themselves using a trusted certificate with a correct &#039;&#039;common name&#039;&#039; (CN).  This is done using &#039;&#039;mutual transport layer security&#039;&#039; (MTLS).  Therefore, you need to configure MTLS in the LAP (see [[#If_you_want_to_setup_MTLS-restricted_Delivery_of_Update_Scripts | If you want to setup MTLS-restricted Delivery of Update Scripts]] above). &lt;br /&gt;
&lt;br /&gt;
You can enable this by setting &#039;&#039;forcetrust&#039;&#039; to &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; and &#039;&#039;httpsport&#039;&#039; to the port configured as &#039;&#039;MTLS Port&#039;&#039; in your web server.  This is done in the &#039;&#039;times&#039;&#039; tag of your &amp;lt;code&amp;gt;user-config.xml&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;times &lt;br /&gt;
        ...&lt;br /&gt;
        forcehttps=&amp;quot;true&amp;quot;&lt;br /&gt;
        httpsport=&amp;quot;444&amp;quot;&lt;br /&gt;
        forcetrust=&amp;quot;true&amp;quot;&lt;br /&gt;
    /&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Please note that &#039;&#039;forcetrust&#039;&#039; does nothing unless &#039;&#039;forcehttps&#039;&#039; is also set!&lt;br /&gt;
&lt;br /&gt;
If so, the update server will deliver update script snippets only to clients which identify themselves with a proper certificate.    For this to work, you will need to add the public key of your certificate authority to your web server&#039;s list of trusted certificates.  &lt;br /&gt;
&lt;br /&gt;
When using the &#039;&#039;Linux Application Platform&#039;&#039; (LAP), you need to add the PEM-encoded public key of your certificate authority to the &#039;&#039;innovaphone-ca.pem&#039;&#039; file in &amp;lt;code&amp;gt;/home/root/ssl_cert&amp;lt;/code&amp;gt;.  When you have installed the LAP, this file will contain the PEM-encoded public keys of the 2 innovaphone device certificate authorities.  You can simply add the public key of your CA to the end of this file:&lt;br /&gt;
&lt;br /&gt;
 -----BEGIN CERTIFICATE-----&lt;br /&gt;
 ...inno-ca public key...&lt;br /&gt;
 -----END CERTIFICATE-----&lt;br /&gt;
 -----BEGIN CERTIFICATE-----&lt;br /&gt;
 ...inno-ca2 public key...&lt;br /&gt;
 -----END CERTIFICATE-----&lt;br /&gt;
 -----BEGIN CERTIFICATE-----&lt;br /&gt;
 ...your-ca public key...&lt;br /&gt;
 -----END CERTIFICATE-----&lt;br /&gt;
&lt;br /&gt;
You will need to restart the LigHTTPD then (most easily done by restarting the entire LAP (&#039;&#039;Diagnose/Reset&#039;&#039;) or by issuing the command &amp;lt;code&amp;gt;/etc/rc2.d/S02lighttpd restart&amp;lt;/code&amp;gt; from the linux root command prompt). Finally, you must set the &#039;&#039;forcetrust&#039;&#039; attribute. &lt;br /&gt;
(Note that the &#039;&#039;innovaphone-ca.pem&#039;&#039; file may be overwritten when a new LAP version is installed.  It is thus a good idea to keep a copy and check it after an upgrade).&lt;br /&gt;
&lt;br /&gt;
When &#039;&#039;forcetrust&#039;&#039; is effective and the calling device does not use HTTPS, it will be reconfigured to do so:&lt;br /&gt;
&lt;br /&gt;
 # using HTTP and &#039;forcehttps&#039; is set -&amp;gt; need to switch to HTTPS&lt;br /&gt;
 ...&lt;br /&gt;
 # new url=https://update.yourcompany.com:444/update/update.php?polling=5&amp;amp;phase=&amp;amp;type=#t&amp;amp;sn=#m&amp;amp;hwid=#h&amp;amp;ip=#i&amp;amp;env=default&lt;br /&gt;
&lt;br /&gt;
If the calling device uses HTTPS but sends no certificate, you will see a message like&lt;br /&gt;
&lt;br /&gt;
 # cannot verify CN with HTTPS: SSL_CLIENT_S_DN_CN not present - fix web server configuration or use MTLS-enabled port!&lt;br /&gt;
&lt;br /&gt;
This is probably because it is using a non-MTLS enabled port for HTTPS (e.g. the standard port 443) although MTLS is configured for a different port. &lt;br /&gt;
&lt;br /&gt;
If the calling device uses HTTPS and sends a certificate but the CN does not match the serial number of the device, you will see a message such as&lt;br /&gt;
&lt;br /&gt;
 # Device claims to be &#039;IP232-30-00-af&#039; but identifies as &#039;CKL-CELSIUS-W10.innovaphone.sifi&#039; by TLS&lt;br /&gt;
&lt;br /&gt;
If the calling device uses HTTPS and sends a certificate but the certificate is not trusted because its issuer is not listed in &#039;&#039;innovaphone-ca.pem&#039;&#039; (see above), the connection will be refused &lt;br /&gt;
&lt;br /&gt;
In all such cases, no snippet will be delivered.  If the certificate is good, you will see a message like &lt;br /&gt;
&lt;br /&gt;
 # good certificate(CN=&#039;IP232-30-00-af&#039;)&lt;br /&gt;
&lt;br /&gt;
followed by the appropriate snippets.&lt;br /&gt;
&lt;br /&gt;
==== Using multiple Phases ====&lt;br /&gt;
When you configure multiple phases, all phases up to the final phase are stepped through and when all associated update script snippets for all phases are done, the device will ultimately stay in the final phase.  This can be used e.g. to implement update script snippets which are executed once only when the device is initialized.  Settings made in all but the last phase can later be overridden by the user or an administrator.  The settings done in the update script settings for the final phase however are re-executed whenever one of your update script files for this phase changes.&lt;br /&gt;
The process of deploying some initial settings is often called &#039;&#039;staging&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
To enable staging, you therefore create a new phase that comes before the default phase (which is &#039;&#039;update&#039;&#039;).  Phases are sorted numerical by an attribute called &#039;&#039;seq&#039;&#039;.  As the default phase &#039;&#039;update&#039;&#039; is defined with &#039;&#039;seq=200&#039;&#039;, your new staging phase must be defined with a lower seq value:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
    ...&lt;br /&gt;
    &amp;lt;phases&amp;gt;&lt;br /&gt;
	    &amp;lt;phase id=&amp;quot;staging&amp;quot; seq=&amp;quot;100&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/phases&amp;gt;&lt;br /&gt;
    ...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When you define such a phase, there will be new possible update script snippet file names: &lt;br /&gt;
&lt;br /&gt;
 # phase: staging, nextphase: update, environment: default, type: IP232, classes: phone+pre_opus_phone+phone_newui&lt;br /&gt;
 # possible files (from scripts):&lt;br /&gt;
 # scripts/all-all-00_90_33_30_00_af.txt does not exist&lt;br /&gt;
 # scripts/all-all-default.txt does not exist&lt;br /&gt;
 # scripts/all-phone-00_90_33_30_00_af.txt does not exist&lt;br /&gt;
 # scripts/all-phone-default.txt does not exist&lt;br /&gt;
 # scripts/all-pre_opus_phone-00_90_33_30_00_af.txt does not exist&lt;br /&gt;
 # scripts/all-pre_opus_phone-default.txt does not exist&lt;br /&gt;
 # scripts/all-phone_newui-00_90_33_30_00_af.txt does not exist&lt;br /&gt;
 # scripts/all-phone_newui-default.txt does not exist&lt;br /&gt;
 # scripts/staging-all-00_90_33_30_00_af.txt does not exist&lt;br /&gt;
 # scripts/staging-all-default.txt does not exist&lt;br /&gt;
 # scripts/staging-phone-00_90_33_30_00_af.txt does not exist&lt;br /&gt;
 # scripts/staging-phone-default.txt does not exist&lt;br /&gt;
 # scripts/staging-pre_opus_phone-00_90_33_30_00_af.txt does not exist&lt;br /&gt;
 # scripts/staging-pre_opus_phone-default.txt does not exist&lt;br /&gt;
 # scripts/staging-phone_newui-00_90_33_30_00_af.txt does not exist&lt;br /&gt;
 # scripts/staging-phone_newui-default.txt does not exist&lt;br /&gt;
&lt;br /&gt;
First of all, there are new names for this particular phase.  Furthermore, as we now have multiple phases, the new wild-card name &#039;&#039;all&#039;&#039; is possible.  &lt;br /&gt;
&lt;br /&gt;
An example for a staging script snippet might be a file called &amp;lt;code&amp;gt;staging-all-all.txt&amp;lt;/code&amp;gt;: &lt;br /&gt;
&lt;br /&gt;
 # change admin password&lt;br /&gt;
 config add CMD0 /user admin,my-admin-password&lt;br /&gt;
 config activate&lt;br /&gt;
 config rem CMD0 /user&lt;br /&gt;
&lt;br /&gt;
This will set the admin password to &amp;lt;code&amp;gt;my-admin-password&amp;lt;/code&amp;gt; during staging (it should be obvious that such staging should only be done in combination with [[#Enforcing_Trust|Enforcing Trust]], see above).&lt;br /&gt;
&lt;br /&gt;
=== A complete &amp;lt;code&amp;gt;user-config.xml&amp;lt;/code&amp;gt; Sample ===&lt;br /&gt;
Here is a complete sample of a configuration file. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&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;!DOCTYPE config SYSTEM &amp;quot;full-config.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- add your local configuration here --&amp;gt;&lt;br /&gt;
&amp;lt;config debugmerge=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;master info=&amp;quot;http://172.16.0.10/CMD0/box_info.xml&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;status&lt;br /&gt;
	    dir=&amp;quot;status&amp;quot;&lt;br /&gt;
	    missing=&amp;quot;1000&amp;quot;&lt;br /&gt;
    /&amp;gt;&lt;br /&gt;
    &amp;lt;backup&lt;br /&gt;
        dir=&amp;quot;backup&amp;quot;&lt;br /&gt;
    /&amp;gt;&lt;br /&gt;
    &amp;lt;times &lt;br /&gt;
        allow=&amp;quot;22,23,0,1,2,3,4&amp;quot; &lt;br /&gt;
        initial=&amp;quot;1&amp;quot;&lt;br /&gt;
        forcehttps=&amp;quot;true&amp;quot;&lt;br /&gt;
	httpsport=&amp;quot;444&amp;quot;&lt;br /&gt;
        forcetrust=&amp;quot;true&amp;quot;&lt;br /&gt;
    /&amp;gt;&lt;br /&gt;
    &amp;lt;customcerts&lt;br /&gt;
        dir=&amp;quot;certs&amp;quot;&lt;br /&gt;
	CAname=&amp;quot;innovaphone Device Certification Authority,innovaphone Device Certification Authority 2&amp;quot;&lt;br /&gt;
        CSRsan-dns-1=&amp;quot;{name}.company.com&amp;quot;&lt;br /&gt;
        CSRsan-dns-2=&amp;quot;{hwid}.company.com&amp;quot;&lt;br /&gt;
        CSRsan-dns-3=&amp;quot;{rdns}&amp;quot;&lt;br /&gt;
        CSRsan-ip-1=&amp;quot;{realip}&amp;quot;&lt;br /&gt;
	/&amp;gt;&lt;br /&gt;
    &amp;lt;phases&amp;gt;&lt;br /&gt;
	    &amp;lt;phase id=&amp;quot;staging&amp;quot; seq=&amp;quot;100&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/phases&amp;gt;&lt;br /&gt;
    &amp;lt;environments&amp;gt;&lt;br /&gt;
        &amp;lt;environment id=&amp;quot;intranet&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;environment id=&#039;sifi&#039;&amp;gt;&lt;br /&gt;
		&amp;lt;implies&amp;gt;intranet&amp;lt;/implies&amp;gt;&lt;br /&gt;
	&amp;lt;/environment&amp;gt;&lt;br /&gt;
        &amp;lt;environment id=&#039;berlin&#039;&amp;gt;&lt;br /&gt;
		&amp;lt;implies&amp;gt;intranet&amp;lt;/implies&amp;gt;&lt;br /&gt;
	&amp;lt;/environment&amp;gt;&lt;br /&gt;
        &amp;lt;environment id=&#039;verona&#039;&amp;gt;&lt;br /&gt;
		&amp;lt;implies&amp;gt;intranet&amp;lt;/implies&amp;gt;&lt;br /&gt;
	&amp;lt;/environment&amp;gt;&lt;br /&gt;
        &amp;lt;environment id=&#039;homeoffice&#039;/&amp;gt;&lt;br /&gt;
        &amp;lt;environment id=&#039;mobile&#039;/&amp;gt;&lt;br /&gt;
   &amp;lt;/environments&lt;br /&gt;
    &amp;lt;queries&amp;gt;&lt;br /&gt;
        &amp;lt;query id=&amp;quot;admin&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;applies&amp;gt;*&amp;lt;/applies&amp;gt;&lt;br /&gt;
        &amp;lt;/query&amp;gt;&lt;br /&gt;
        &amp;lt;query id=&amp;quot;certificates&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;applies&amp;gt;*&amp;lt;/applies&amp;gt;&lt;br /&gt;
            &amp;lt;show title=&amp;quot;Subject&amp;quot;&amp;gt;/state/queries/certificates/info/servercert/certificate/@subject_cn&amp;lt;/show&amp;gt;&lt;br /&gt;
            &amp;lt;show title=&amp;quot;Issuer&amp;quot;&amp;gt;/state/queries/certificates/info/servercert/certificate/@issuer_cn&amp;lt;/show&amp;gt;&lt;br /&gt;
        &amp;lt;/query&amp;gt;&lt;br /&gt;
    &amp;lt;/queries&amp;gt;&lt;br /&gt;
&amp;lt;/config&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Operation ===&lt;br /&gt;
&lt;br /&gt;
==== Configuring and Debugging a real Device ====&lt;br /&gt;
To configure your device for use with the update server, you simply set &amp;lt;code&amp;gt;http://update.yourcompany.com/mtls/update/update.php&amp;lt;/code&amp;gt; as &#039;&#039;Command File URL&#039;&#039; in &#039;&#039;Services/Update&#039;&#039; (you can optionally add a &amp;lt;code&amp;gt;?env=envname1,envname2&amp;lt;/code&amp;gt; query argument if you want to set one or more specific environments for your device).  The update server will re-configure the device later on so that it uses all the required query arguments.&lt;br /&gt;
&lt;br /&gt;
Generally, there are the following methods to set the &#039;&#039;Command File URL&#039;&#039;&lt;br /&gt;
* configure it manually using the admin GUI&lt;br /&gt;
* provide it to the device using DHCP (this will however not work for the softwarephone or &#039;&#039;myPBX for Android/iOS&#039;&#039;)&lt;br /&gt;
* use the innovaphone provisioning service (see [[Reference10:Concept_Provisioning|Reference10:Concept Provisioning]] for details)&lt;br /&gt;
&lt;br /&gt;
Once the &#039;&#039;Command File URL&#039;&#039; is set on the device, you can debug what the update client in the device does, using the normal trace mechanism.  For this, you will want to open the &#039;&#039;Debug&#039;&#039; page (&amp;lt;code&amp;gt;http://x.x.x.x/debug.xml&amp;lt;/code&amp;gt;) and set the &#039;&#039;Update/Polling&#039;&#039; and &#039;&#039;Update/Execution&#039;&#039; check-marks.  When  the update client queries the update server, you will see lines like &lt;br /&gt;
&lt;br /&gt;
 0:0826:465:5 - upd_poll: state IDLE -&amp;gt; RECV&lt;br /&gt;
 0:0826:465:7 - IP.0 -&amp;gt; UPD-POLL.0 : SOCKET_GET_LOCAL_ADDR_RESULT(172.16.100.201,255.255.0.0,0,&#039;&#039;,ANY)&lt;br /&gt;
 0:0826:466:0 - IP.0 -&amp;gt; UPD-POLL.0 : SOCKET_GET_LOCAL_ADDR_RESULT(172.16.100.201,255.255.0.0,0,&#039;&#039;,ANY)&lt;br /&gt;
 0:0826:695:0 - upd_poll: state=RECV sent()&lt;br /&gt;
 0:0826:752:0 - upd_poll: status 200 headercomplete=1 contentlength=0&lt;br /&gt;
 0:0826:754:0 - upd_poll: recv_data(2199)&lt;br /&gt;
 0:0826:754:1 - upd_poll: recv_data(0) EOF&lt;br /&gt;
 0:0826:754:1 - upd_poll: GET EOF - state=RECV http-status=200 length=2199&lt;br /&gt;
 0:0826:754:1 - upd_poll: do commands&lt;br /&gt;
 0:0826:754:1 - upd_poll: state RECV -&amp;gt; EXEC&lt;br /&gt;
&lt;br /&gt;
in the trace.  Commands included in the update script will look like&lt;br /&gt;
&lt;br /&gt;
 0:0826:754:5 - script::get_line: &amp;gt;line(mod cmd UP0 scfg https://update.yourcompany.com/mtls/update/update.php?mode=backup&amp;amp;hwid=#h&amp;amp;sn=#m)&lt;br /&gt;
 0:0826:754:5 - upd_poll: pass &#039;mod cmd UP0 /sync scfg https://update.yourcompany.com/mtls/update/update.php?mode=backup&amp;amp;hwid=#h&amp;amp;sn=#m&#039;)&lt;br /&gt;
&lt;br /&gt;
Finally, you do not need to wait for the next time the device decides to contact the update server.  Instead, you can force this by sending an &amp;lt;code&amp;gt;http://&amp;lt;/code&amp;gt;&#039;&#039;your-device-ip&amp;lt;code&amp;gt;/!mod cmd UP1 poll&amp;lt;/code&amp;gt; to the device.&lt;br /&gt;
&lt;br /&gt;
==== The Device Status Update Page ====&lt;br /&gt;
If status tracking is enabled (see [[#Device_Status | Device Status]] above), the update server will keep a list of devices it knows of.  You can see this list by calling &amp;lt;code&amp;gt;http://update.yourcompany.com/mtls/update/admin/admin.php?mode=status&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
By default, the list will not be updated unless you refresh the page.  However, if you set the &#039;&#039;refresh&#039;&#039; attribute in the &#039;&#039;status&#039;&#039; tag in your &#039;&#039;user-config.xml&#039;&#039; file to &amp;lt;code&amp;gt;60&amp;lt;/code&amp;gt;, all entries in this list will be refreshed every 60 seconds (however, the list itself will not be reloaded, so to see new devices, you need to refresh the entire page).  Devices that have not been seen for more than 7 days are shown in a different colour.  Devices that have not been seen for longer than 90 days will be silently removed from the list.&lt;br /&gt;
&lt;br /&gt;
===== Filtering =====&lt;br /&gt;
From build 2011, you can filter the devices shown using the &#039;&#039;device filter&#039;&#039; field in the &#039;&#039;Device&#039;&#039; column header.  The filter string is matched against ip-address, serial number, type, name, phase, class, environment, firmware and bootcode.  Also, you can filter by using the keywords &#039;&#039;present&#039;&#039; and &#039;&#039;missing&#039;&#039; (based on the &#039;&#039;missing&#039;&#039; attribute of the &#039;&#039;status&#039;&#039; tag in your configuration file). If one of these attributes match your filter expression, the device is shown.&lt;br /&gt;
&lt;br /&gt;
A filter expression must match a complete &#039;&#039;word&#039;&#039;.  For example, if you filter by &amp;lt;code&amp;gt;16&amp;lt;/code&amp;gt; this would match the ip-address &amp;lt;code&amp;gt;172.&amp;lt;/code&amp;gt;16&amp;lt;code&amp;gt;.0.20&amp;lt;/code&amp;gt; but it would not match &amp;lt;code&amp;gt;192.&amp;lt;/code&amp;gt;16&amp;lt;code&amp;gt;8.0.1&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
If you specify multiple filter expressions (separated by white space), only devices which match all of the expressions will be shown.  For example, if you filter by &amp;lt;code&amp;gt;172.16. ip222&amp;lt;/code&amp;gt; this might match all IP222 in your 172.16.*.* network.  Filter expressions are case insensitive.&lt;br /&gt;
&lt;br /&gt;
==== Approving Certificate Signing Requests ====&lt;br /&gt;
When you use custom certificate roll-out, you will see a column &#039;&#039;Certificates&#039;&#039; in the device status list, showing the devices certificate status.  &lt;br /&gt;
&lt;br /&gt;
[[Image:PHP_based_Update_Server_V2_Device_Status.png]]&lt;br /&gt;
&lt;br /&gt;
If a CSR has been created on the device, this will be available for download in the &#039;&#039;Files&#039;&#039; section of the &#039;&#039;Info&#039;&#039; column.  You can submit the CSR to your CA and then upload the signed request (using the &#039;&#039;Upload&#039;&#039; button in the &#039;&#039;Files&#039;&#039; section of the &#039;&#039;Info&#039;&#039; column).  The signed request will eventually be uploaded to the device then.  On  the device itself, the CSR is shown in &#039;&#039;General/Certificates&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[Image:PHP_based_Update_Server_V2_CSR.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Certificate Errors ====&lt;br /&gt;
When a signed certificate request uploaded to the device can not be installed on the device, you will see a message like &amp;lt;code&amp;gt;Certificate upload error - certificate handling stopped&amp;lt;/code&amp;gt; in the &#039;&#039;Certificates&#039;&#039; columns for the device.  In this case, any further processing will be stopped.  Most likely, the reason is that you uploaded the wrong file as signed certificate request (either not a signed certificate at all or a signed request for another device).&lt;br /&gt;
&lt;br /&gt;
In this case&lt;br /&gt;
* remove any certificate request from the device&lt;br /&gt;
* remove the &amp;lt;code&amp;gt;X509/REQUESTERROR&amp;lt;/code&amp;gt; from the device configuration (i.e. &amp;lt;code&amp;gt;vars del X509/REQUESTERROR&amp;lt;/code&amp;gt;)&lt;br /&gt;
: these 2 steps can be easily done by resetting the device to factory defaults and then set the &#039;&#039;Update URL&#039;&#039; again&lt;br /&gt;
* remove any stored files for the device on the update server (shown in the &#039;&#039;Certificates&#039;&#039; column)&lt;br /&gt;
&lt;br /&gt;
The normal process will start all over again then.&lt;br /&gt;
&lt;br /&gt;
=== Migrating old PHP Update Server Installations ===&lt;br /&gt;
==== Migrating from build 2000 and newer ====&lt;br /&gt;
* Copy all files and folders, &#039;&#039;&#039;except&#039;&#039;&#039; the &#039;&#039;scripts&#039;&#039; and &#039;&#039;config&#039;&#039; folder, from the source to your destination&lt;br /&gt;
* make sure all files and directories have correct owner (&#039;&#039;www-data&#039;&#039;), group (&#039;&#039;www-data&#039;&#039;) and mode (&#039;&#039;read&#039;&#039;/&#039;&#039;write&#039;&#039; plus &#039;&#039;execute&#039;&#039; for directories)&lt;br /&gt;
: for example, in WinSCP you can use the &#039;&#039;Properties (F9)&#039;&#039; dialogue on the installations root folder:&lt;br /&gt;
: [[Image:PHP based Update Server V2-WinSCP-Properties.png]]&lt;br /&gt;
* open the &#039;&#039;StatusPage&#039;&#039; and make sure you refresh all cached files in your browser (depending on your browser, this may happen with Ctrl-R or Ctrl-F5)&lt;br /&gt;
&lt;br /&gt;
==== Migrating from build 1011 and older ====&lt;br /&gt;
To upgrade from the [http://download.innovaphone.com/ice/wiki-src/index.php?urloffset=php-update-server%2F&amp;amp;name=php-update-server+%28all+available+builds%29&amp;amp;reverselevel=0&amp;amp;maxbuilds=999&amp;amp;root=c%3A%2Finetpub%2Fwwwroot%2Fdownload%2Fice%2Fdownload%2Fp%2Fwiki-src%2Fphp-update-server%2F1010+%28PHP+based+Update+Server+final%29%2F.. old version (builds up to 1011)] of the PHP based update server (as described in [[Howto:PHP based Update Server]]), do the following&lt;br /&gt;
&lt;br /&gt;
* diff your &amp;lt;code&amp;gt;config.xml&amp;lt;/code&amp;gt; to the one originally shipped (you can download it at [http://download.innovaphone.com/ice/download/p/wiki-src/php-update-server/1011%20(PHP%20based%20Update%20Server%20final)/php-update-server-1011.zip download.innovaphone.com/ice/wiki-src])&lt;br /&gt;
: take note of all the changes you made to it&lt;br /&gt;
* install the new version of the update server to a different URL&lt;br /&gt;
* configure it according to your needs by modifying &amp;lt;code&amp;gt;user-config.xml&amp;lt;/code&amp;gt;.  Do not modify the new &amp;lt;code&amp;gt;config.xml&amp;lt;/code&amp;gt;!&lt;br /&gt;
** apply all modifications you did to your old &amp;lt;code&amp;gt;config.xml&amp;lt;/code&amp;gt; to your new &amp;lt;code&amp;gt;user-config.xml&amp;lt;/code&amp;gt;&lt;br /&gt;
** if you have used a custom setting for fwstorage/@url, you need to change it a bit.  Change for example &amp;lt;code&amp;gt;url=&amp;quot;http://myfwserver.mycompany.com&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;http://myfwserver.mycompany.com/{build}/&amp;lt;/code&amp;gt; (note the trailing slash!)&lt;br /&gt;
* copy all your update script snippet files from the old server (these are all the .txt files in the old server&#039;s root directory) to the &amp;lt;code&amp;gt;scripts&amp;lt;/code&amp;gt; directory of your new server&lt;br /&gt;
* copy the complete &amp;lt;code&amp;gt;fw&amp;lt;/code&amp;gt; tree from the old server to the &amp;lt;code&amp;gt;fw&amp;lt;/code&amp;gt; directory of your new server&lt;br /&gt;
* thoroughly test your new installation with some test devices&lt;br /&gt;
* when satisfied, edit &amp;lt;code&amp;gt;update-migrate.php&amp;lt;/code&amp;gt; and change the code as described in the comment inside the file&lt;br /&gt;
* copy &amp;lt;code&amp;gt;update-migrate.php&amp;lt;/code&amp;gt; from the new installation to the old installation&lt;br /&gt;
* on one of the devices which are currently served by the old update server, change the &#039;&#039;Command File URL&#039;&#039; so that it points to &amp;lt;code&amp;gt;update-migrate.php&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;update.php&amp;lt;/code&amp;gt;.  Do not change anything else in the URL. So if it currently is set to e.g. &lt;br /&gt;
: &amp;lt;code&amp;gt;https://172.16.0.90/update/update.php?type=#t&amp;amp;env=sifi&amp;amp;polling=0&amp;amp;phase=update&amp;lt;/code&amp;gt;, change it to&lt;br /&gt;
: &amp;lt;code&amp;gt;https://172.16.0.90/update/update-migrate.php?type=#t&amp;amp;env=sifi&amp;amp;polling=0&amp;amp;phase=update&amp;lt;/code&amp;gt;&lt;br /&gt;
* verify that this device properly switches to your new installation&lt;br /&gt;
** the &#039;&#039;Command File URL&#039;&#039; is changed so that it points to the new installation&lt;br /&gt;
** the device shows up in the device status page of your new server&lt;br /&gt;
&lt;br /&gt;
* rename &amp;lt;code&amp;gt;update.php&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;update-old.php&amp;lt;/code&amp;gt; in your old update server&lt;br /&gt;
* rename &amp;lt;code&amp;gt;update-migrate.php&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;update.php&amp;lt;/code&amp;gt; in your old update server&lt;br /&gt;
* verify that all of your devices start showing up in the new server&#039;s status page&lt;br /&gt;
&lt;br /&gt;
=== Complete Parameter Reference ===&lt;br /&gt;
Note: attributes are marked with an &#039;&#039;at&#039;&#039; (&amp;lt;code&amp;gt;@&amp;lt;/code&amp;gt;) prefix.  So &#039;&#039;master/@info&#039;&#039; refers to the &#039;&#039;info&#039;&#039; attribute in the &#039;&#039;master&#039;&#039; tag.&lt;br /&gt;
&lt;br /&gt;
The following tags and attributes are available in the &amp;lt;code&amp;gt;user-config.xml&amp;lt;/code&amp;gt; file, their default values are configured in &amp;lt;code&amp;gt;config.xml&amp;lt;/code&amp;gt; (which you should not modify):&lt;br /&gt;
&lt;br /&gt;
==== master ====&lt;br /&gt;
Defines the reference device where the firmware and boot code information is taken from.&lt;br /&gt;
; master/@info : the URL to the device info data.  Set it to an URL like &amp;lt;code&amp;gt;http://&amp;lt;/code&amp;gt;&#039;&#039;your-reference-device&#039;&#039;&amp;lt;code&amp;gt;/CMD0/box_info.xml&amp;lt;/code&amp;gt;. Please note that this device must not have the &#039;&#039;Password protect all HTTP pages&#039;&#039; set in &#039;&#039;Services/HTTP/Server&#039;&#039;.  If you use the literal &amp;lt;code&amp;gt;none&amp;lt;/code&amp;gt;, the master device will not be queried&lt;br /&gt;
; master/@expire : the firmware info cache lifetime.  The firmware information is cached in a file (to make sure this information is present even if the reference device is off-line).  The cache will not be refreshed before the &#039;&#039;expire&#039;&#039; time (in seconds) is expired&lt;br /&gt;
; master/@cache : the cache file name.  The web server must be able to write this file (see [[#Installation | &#039;&#039;Installation&#039;&#039; ]] above)&lt;br /&gt;
; master/@user : if non-empty, this is the user name required to access the update server&#039;s web ui&lt;br /&gt;
; master/@password : the password&lt;br /&gt;
&lt;br /&gt;
From build 2009, you can control the firmware and bootcode version to use on update:&lt;br /&gt;
; master/@firmware : if set, it may be one of &lt;br /&gt;
:: &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt; (default if not set) : the firmware version is derived from the master device&lt;br /&gt;
:: &amp;lt;code&amp;gt;none&amp;lt;/code&amp;gt; : the firmware update is generally disabled&lt;br /&gt;
:: &#039;&#039;build-number&#039;&#039; : the firmware is set to a certain &#039;&#039;build-number&#039;&#039; regardless of the firmware running on the master device&lt;br /&gt;
; master/@bootcode: if set, it may be one of &lt;br /&gt;
:: &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt; (default if not set) : the bootcode version is derived from the master device&lt;br /&gt;
:: &amp;lt;code&amp;gt;firmware&amp;lt;/code&amp;gt; : the bootcode version is set to the firmware version. This may be useful if the master device has no bootcode (e.g. the ipva)&lt;br /&gt;
:: &amp;lt;code&amp;gt;none&amp;lt;/code&amp;gt; : the bootcode update is generally disabled&lt;br /&gt;
:: &#039;&#039;build-number&#039;&#039; : the bootcode is set to a certain &#039;&#039;build-number&#039;&#039; regardless of the bootcode running on the master device&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;master &lt;br /&gt;
        info=&amp;quot;http://172.16.0.10/CMD0/box_info.xml&amp;quot;&lt;br /&gt;
        expire=&amp;quot;3600&amp;quot;&lt;br /&gt;
        cache=&amp;quot;cache/master-info.xml&amp;quot;&lt;br /&gt;
        user=&amp;quot;myadmin&amp;quot;&lt;br /&gt;
        password=&amp;quot;mysecret&amp;quot;&lt;br /&gt;
        firmware=&amp;quot;4711&amp;quot;&lt;br /&gt;
        bootcode=&amp;quot;firmware&amp;quot;&lt;br /&gt;
    /&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== master/applies ====&lt;br /&gt;
Available from build 2009.&lt;br /&gt;
&lt;br /&gt;
Boot code and firmware updates are only executed by devices which match all of the given &amp;lt;applies&amp;gt; conditions. A condition is met if the device belongs to the class that is given as tag content.  If the &#039;&#039;env&#039;&#039; attribute is set, the tag content is interpreted as an &#039;&#039;environment&#039;&#039; name which has to match.&lt;br /&gt;
&lt;br /&gt;
; master/applies/@env : if this attribute exists, the tag content is compared with the environments the device is in.  Otherwise, it is compared with the classes it is in &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;master &lt;br /&gt;
    info=&amp;quot;http://172.16.0.10/CMD0/box_info.xml&amp;quot;&lt;br /&gt;
    expire=&amp;quot;3600&amp;quot;&lt;br /&gt;
    cache=&amp;quot;cache/master-info.xml&amp;quot;&lt;br /&gt;
    user=&amp;quot;myadmin&amp;quot;&lt;br /&gt;
    password=&amp;quot;mysecret&amp;quot;&lt;br /&gt;
    firmware=&amp;quot;4711&amp;quot;&lt;br /&gt;
    bootcode=&amp;quot;firmware&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;!-- applied to phones in berlin only --&amp;gt;&lt;br /&gt;
    &amp;lt;applies&amp;gt;phone&amp;lt;/applies&amp;gt;&lt;br /&gt;
    &amp;lt;applies env=&amp;quot;&amp;quot;&amp;gt;berlin&amp;lt;/applies&amp;gt;&lt;br /&gt;
&amp;lt;/master&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== fwstorage ====&lt;br /&gt;
Defines from where the device will retrieve the firmware files for updates.&lt;br /&gt;
; fwstorage/@url :  defines the URL to retrieve the files from.  In this URL, the following meta words will be replaced as follows:&lt;br /&gt;
:* &amp;lt;code&amp;gt;{build}&amp;lt;/code&amp;gt; - the requested firmware or boot-code &lt;br /&gt;
:* &amp;lt;code&amp;gt;{model}&amp;lt;/code&amp;gt; - the devices type (e.g. &amp;lt;code&amp;gt;IP232&amp;lt;/code&amp;gt;).  This is derived from the &#039;&#039;type&#039;&#039; query argument used in the update URL which is set to the value &amp;lt;code&amp;gt;#t&amp;lt;/code&amp;gt; which in turn is expanded to the [[Reference10:Concept_Update_Server#Scfg_command|&#039;&#039;device type&#039;&#039;]] of the device requesting the update script&lt;br /&gt;
:* &amp;lt;code&amp;gt;{filetype}&amp;lt;/code&amp;gt; - the type of the required file, either &amp;lt;code&amp;gt;boot&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;prot&amp;lt;/code&amp;gt;&lt;br /&gt;
:* &amp;lt;code&amp;gt;{filename}&amp;lt;/code&amp;gt; - (from build 2014) the boot code or firmware filename for the device in lower case.  Required if you use the LAP as firmware storage and firmware files are falsely requested in uppercase letters (as URLs on the LAP are case sensitive and if the files are requested with upper case names, the original files with lowercase name are not found).  This also allows you to use alternate firmware file names (such as e.g. &amp;lt;code&amp;gt;ip110-sip.bin&amp;lt;/code&amp;gt;).  See the &#039;&#039;filenames&#039;&#039; tag&lt;br /&gt;
Note that if the &#039;&#039;url&#039;&#039; ends with a slash (&amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt;), the calling device will automatically [[Reference10:Concept_Update_Server#Prot_command|append the name of the requested file]]. In this case, the file system the URL points to must therefore contain sub-directories for each firmware build which contain the corresponding firmware builds (e.g, &#039;&#039;fw/12345/ip232.bin&#039;&#039;).  If &#039;&#039;url&#039;&#039; is not an URL (as is the case for the default value &amp;lt;code&amp;gt;fw/{build}/&amp;lt;/code&amp;gt;), it is treated as a sub-directory underneath the update server&#039;s root directory&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;fwstorage url=&amp;quot;fw/{build}/&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Loading firmware files from innovaphone.com =====&lt;br /&gt;
You can also load firmware from the innovaphone.com web site.  To do so, set &#039;&#039;url&#039;&#039; like so:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;fwstorage url=&amp;quot;http://webbuild.innovaphone.com/{build}/&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Please note that &#039;&#039;this is a voluntary service, no guarantee of availability, no service level agreement&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[User:Ckl|ckl]] 15:40, 21 February 2023 (CET) This service has been discontinued. You may consider using &amp;lt;code&amp;gt;https://store.innovaphone.com/release/download/{build}/&amp;lt;/code&amp;gt; instead.&lt;br /&gt;
&lt;br /&gt;
==== backup ====&lt;br /&gt;
Defines where backup files are kept.&lt;br /&gt;
; backup/@dir :  the directory underneath the script directory where backups are stored&lt;br /&gt;
; backup/@nbackups :  the number of different backup files kept&lt;br /&gt;
; backup/@scfg :  the target URL for the scfg command.  If this is not an url, it is interpreted relative to the script directory URL. You can add more options for the &#039;&#039;scfg&#039;&#039; command, like in &amp;lt;code&amp;gt;scfg=&amp;quot;update.php?mode=backup&amp;amp;amp;hwid=#h&amp;amp;amp;sn=#m ser hourly /force 1&amp;quot;&amp;lt;/code&amp;gt; (this example will make sure backups are attempted only once per hour, so as to reduce load on the server).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;backup &lt;br /&gt;
        dir=&amp;quot;backup&amp;quot;&lt;br /&gt;
        nbackups=&amp;quot;10&amp;quot;&lt;br /&gt;
        scfg=&amp;quot;update.php?mode=backup&amp;amp;amp;hwid=#h&amp;amp;amp;sn=#m&amp;quot;&lt;br /&gt;
    /&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== status ====&lt;br /&gt;
Defines details regarding the state kept for a device requesting an update script.&lt;br /&gt;
; status/@dir : the directory the status files are kept in (e.g. &amp;lt;code&amp;gt;status&amp;lt;/code&amp;gt;).  Used as the name for a sub-directory underneath your install directory on your web server. You must make sure that files in this directory cannot be read by anyone without proper authentication, as such files may contain sensitive information.&lt;br /&gt;
; status/@expire : if set and not empty, devices which have not requested an update script will be removed from the inventory after &#039;&#039;n&#039;&#039; seconds.  For example, &#039;&#039;expire=&amp;quot;7776000&amp;quot;&#039;&#039; will forget about devices after 90 days with no contact&lt;br /&gt;
; status/@missing : devices are shown in a different colour (indicating that they are &#039;&#039;missing&#039;&#039;) after &#039;&#039;n&#039;&#039; seconds. For example, &#039;&#039;missing=&amp;quot;604800&amp;quot;&#039;&#039; will flag devices as missing after 7 days with no contact&lt;br /&gt;
; status/@refresh : if set and not empty and larger than zero, the admin user interface showing the known devices will refresh the status of all shown devices each &#039;&#039;n&#039;&#039; seconds&lt;br /&gt;
; status/@logkeep : number of seconds log messages for individual devices will be kept&lt;br /&gt;
; status/usehttpsdevlinks : if set to true, links to devices in the status page are created using the https:// scheme&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;status &lt;br /&gt;
        dir=&amp;quot;status&amp;quot; &lt;br /&gt;
        expire=&amp;quot;7776000&amp;quot; &lt;br /&gt;
        missing=&amp;quot;200&amp;quot; &lt;br /&gt;
        refresh=&amp;quot;10&amp;quot;&lt;br /&gt;
        logkeep=&amp;quot;90&amp;quot;&lt;br /&gt;
        usehttpsdevlinks=&amp;quot;true&amp;quot;&lt;br /&gt;
    /&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== times ====&lt;br /&gt;
Defines details regarding the delivery of update scripts to requesting devices. &lt;br /&gt;
&lt;br /&gt;
; times/@dir : the directory the update scripts are stored in.  For security reasons, you may want to make sure that files in this directory cannot be read without proper authentication.&lt;br /&gt;
&lt;br /&gt;
These attributes define the arguments of the [[Reference10:Concept_Update_Server#Times_command | times command]].  If neither &#039;&#039;allow&#039;&#039; nor &#039;&#039;initial&#039;&#039; is set, no &#039;&#039;times&#039;&#039; command is used (that is, the update scripts will be processed at all times).&lt;br /&gt;
; times/@allow :  the hours to be used in the &#039;&#039;times&#039;&#039; command (as in &amp;lt;code&amp;gt;mod cmd UP1 times /allow &amp;lt;/code&amp;gt;&#039;&#039;hours&#039;&#039;)&lt;br /&gt;
; times/@initial &lt;br /&gt;
: the minutes to be used in the &#039;&#039;times&#039;&#039; command (as in &amp;lt;code&amp;gt;mod cmd UP1 times /initial &amp;lt;/code&amp;gt;&#039;&#039;minutes&#039;&#039;). If you want to use initial staging of virgin devices &#039;&#039;forcestaging&#039;&#039; must be &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Delivered update scripts can include a [[Reference10:Concept_Update_Server#Check_command | check command ]] if the &#039;&#039;check&#039;&#039; attribute is set to &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt;.  . In this case, the devices will executed the scripts again only when you have edited/changed them.&lt;br /&gt;
; times/@check :  if set to true, update scripts will be executed once only (unless their contents change)&lt;br /&gt;
&lt;br /&gt;
When editing a number of update scripts, it is often not desirable if one changed script is already executed before another is changed too.   When the &#039;&#039;grace&#039;&#039; attribute is set to a positive value, no script at all is delivered to requesting devices unless &#039;&#039;n&#039;&#039; seconds have expired since the last edit.  For example, setting &#039;&#039;grace&#039;&#039; to 90 gives you one and a half minute to finish all your edits. &lt;br /&gt;
&lt;br /&gt;
; times/@grace :  defines the number of seconds that must expire before update script changes take effect&lt;br /&gt;
&lt;br /&gt;
The update server works in either &#039;&#039;fast&#039;&#039; or &#039;&#039;normal&#039;&#039; mode. In &#039;&#039;fast&#039;&#039; mode, update scripts have to be requested more frequently, for example to step through multiple staging phases faster. This is enforced by modifying the calling device&#039;s &#039;&#039;Interval&#039;&#039; setting in [[Reference11r1:Services/Update | &#039;&#039;Services/Update &#039;&#039;]] and setting it to 1 in &#039;&#039;fast&#039;&#039; mode.&lt;br /&gt;
&lt;br /&gt;
; times/@interval :  polling interval in minutes for normal operation (that is, when all staging is done)&lt;br /&gt;
; times/@polling :  when you are using multiple &#039;&#039;phases&#039;&#039; (e.g. &#039;&#039;staging&#039;&#039; and &#039;&#039;update&#039;&#039;), this defines the number of seconds to wait before the device reads the scripts for the next phase (see [[Reference10:Concept_Update_Server#Provision_command | provision command]]) (please do not modify the default value)&lt;br /&gt;
&lt;br /&gt;
In some installations it may be desired to deliver update scripts with HTTPS only or even only to calling devices which have identified themselves with a proper TLS certificate.  &lt;br /&gt;
&lt;br /&gt;
; times/@forcehttps : if set to &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt;, update scripts will only be delivered if the device call in with HTTPS.  If the device is ready to receive an update script and still calls in with HTTP only, its &#039;&#039;Command File URL&#039;&#039; will be re-configured to use HTTPS automatically.&lt;br /&gt;
; times/@httpsport : if you use a non-standard port for HTTPS access to update scripts, it can be defined here&lt;br /&gt;
; times/@httpsurlmod : if your HTTPS URL differs from the HTTP URL, you can specifiy a &#039;&#039;modifier&#039;&#039;.  It has the form &amp;lt;code&amp;gt;!&amp;lt;/code&amp;gt;&#039;&#039;pattern&#039;&#039;&amp;lt;code&amp;gt;!&amp;lt;/code&amp;gt;&#039;&#039;replacement&#039;&#039;&amp;lt;code&amp;gt;!&amp;lt;/code&amp;gt; where &#039;&#039;pattern&#039;&#039; is a [http://docs.php.net/manual/en/pcre.pattern.php PHP PCRE pattern]. For example, &amp;lt;code&amp;gt;!mtls/!!i&amp;lt;/code&amp;gt; will remove the string &amp;lt;code&amp;gt;mtls/&amp;lt;/code&amp;gt; from the URL used by the device to create the HTTPS URL to use. The delimiter (in this case &amp;quot;!&amp;quot;) can be changed according to your own wishes, the first character defines the delimiter. The &amp;quot;i&amp;quot; at the end ignores uppercase.&lt;br /&gt;
&lt;br /&gt;
Note: If you want to change the hostname of your URL, you have to add the Port 444 to your hostname. The code should then look like this: &amp;lt;code&amp;gt;!hostname1:444/mtls/!hostname2:444/!i&amp;lt;/code&amp;gt;.&lt;br /&gt;
; times/@forcetrust : if set to &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt;, update scripts will only be delivered if the device call in with HTTPS and a valid and trusted client certificate that identifies itself as the devices it claims to be&lt;br /&gt;
; times/@forcestaging : before build 2009, the restrictions imposed by the times/@allow settings affected all update &#039;&#039;phases&#039;&#039;.  This however makes staging cumbersome, as you usually want to restrict normal configuration changes to off-working-hours.  If it is &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt;, the restriction will be applied only to the last phase (that is, the &#039;&#039;staging&#039;&#039; phases will execute immediately). Also, the final phase will be executed once by staged devices. &lt;br /&gt;
: Since build 2021 the standard value was changed to &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;times &lt;br /&gt;
        dir=&amp;quot;scripts&amp;quot; &lt;br /&gt;
        allow=&amp;quot;&amp;quot; &lt;br /&gt;
        initial=&amp;quot;&amp;quot; &lt;br /&gt;
        check=&amp;quot;true&amp;quot; &lt;br /&gt;
        polling=&amp;quot;5&amp;quot; &lt;br /&gt;
        interval=&amp;quot;15&amp;quot; &lt;br /&gt;
        grace=&amp;quot;90&amp;quot; &lt;br /&gt;
        forcehttps=&amp;quot;true&amp;quot; &lt;br /&gt;
        httpsport=&amp;quot;444&amp;quot; &lt;br /&gt;
        forcetrust=&amp;quot;false&amp;quot; &lt;br /&gt;
        httpsurlmod=&amp;quot;!mtls/!!i&amp;quot;&lt;br /&gt;
        forcestaging=&amp;quot;true&amp;quot;&lt;br /&gt;
/&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== phases ==== &lt;br /&gt;
Defines the scripting phases.  In many installations, there are initializations which should be performed once only.  This is known as the &#039;&#039;staging&#039;&#039; phase.  Once this is done, the devices continue with the execution of the normal update scripts (this phase is known as &#039;&#039;update&#039;&#039; by default).  In the (unlikely) event that you want more or less phases, you can add/remove &#039;&#039;phase&#039;&#039; tags.&lt;br /&gt;
==== phases/phase ====&lt;br /&gt;
; phases/phase/@id :  the name for the phase&lt;br /&gt;
; phases/phase/@seq:  the sequential number for the phase. Phases are stepped-through in the numeric order defined by their &#039;&#039;seq&#039;&#039; attribute. &lt;br /&gt;
&lt;br /&gt;
By virtue of the &#039;&#039;seq&#039;&#039; attribute, you can insert phases in to the set of phases defined by default, which is&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;phases&amp;gt;&lt;br /&gt;
        &amp;lt;!-- sequence is important! --&amp;gt;&lt;br /&gt;
        &amp;lt;phase id=&amp;quot;staging&amp;quot; seq=&amp;quot;100&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;phase id=&amp;quot;update&amp;quot; seq=&amp;quot;200&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/phases&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
For example,&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;phases&amp;gt;&lt;br /&gt;
        &amp;lt;phase id=&amp;quot;phase&amp;quot; seq=&amp;quot;150&amp;quot;&amp;gt;&amp;lt;/phase&amp;gt;&lt;br /&gt;
    &amp;lt;/phases&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
will insert a custom phase &#039;&#039;myphase&#039;&#039; as second phase.&lt;br /&gt;
&lt;br /&gt;
==== environments ====&lt;br /&gt;
Defines the distinguished environments.  Devices can have zero or more &#039;&#039;environments&#039;&#039; associated.  The environments a device is considered to be in must be passed as &amp;lt;code&amp;gt;?env=&amp;lt;/code&amp;gt;&#039;&#039;name1,name2,..&#039;&#039; URL query arg in the update url.  &lt;br /&gt;
&lt;br /&gt;
Update scripts for all environments listed will be applied.&lt;br /&gt;
First the environment scripts itself, then all implied environments in the same order as the &#039;&#039;implies&#039;&#039; tags are listed in the config. &lt;br /&gt;
&lt;br /&gt;
The default config file defines the environments &#039;&#039;intern&#039;&#039; and &#039;&#039;homeoffice&#039;&#039; but you can define your own if you like.&lt;br /&gt;
&lt;br /&gt;
==== environments/environment ====&lt;br /&gt;
; environments/environment/@id :  the name for the environment&lt;br /&gt;
&lt;br /&gt;
==== environments/environment/implies ====&lt;br /&gt;
Each &#039;&#039;environment&#039;&#039; may have a number of sub-tags of type &#039;&#039;implies&#039;&#039;. It contains the &#039;&#039;id&#039;&#039; of another &#039;&#039;environment&#039;&#039;.   If a device is in an environment with an &#039;&#039;implies&#039;&#039; sub-tag, it is assumed that it is in the implied environment also. &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;environments&amp;gt;&lt;br /&gt;
        &amp;lt;environment id=&#039;hq&#039;&amp;gt;&lt;br /&gt;
            &amp;lt;implies&amp;gt;intranet&amp;lt;/implies&amp;gt;&lt;br /&gt;
        &amp;lt;/environment&amp;gt;&lt;br /&gt;
        &amp;lt;environment id=&#039;intranet&#039;/&amp;gt;&lt;br /&gt;
        &amp;lt;environment id=&#039;homeoffice&#039;/&amp;gt;&lt;br /&gt;
    &amp;lt;/environments&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The &amp;lt;code&amp;gt;implies&amp;lt;/code&amp;gt; tag handles no recursion (therefore, in the above example, if &#039;&#039;intranet&#039;&#039; would have an implies, a device in environment &#039;&#039;hq&#039;&#039; would not inherit this implication.  Instead, you must list it explicitly for the &#039;&#039;hq&#039;&#039; environment).&lt;br /&gt;
&lt;br /&gt;
If multiple environments will be used they will be applied also in the same order as the &#039;&#039;environment&#039;&#039; tags are listed in the config.&lt;br /&gt;
&lt;br /&gt;
;There are some special things to keep in mind when adding multiple environments in the &#039;&#039;env&#039;&#039; attribute and they use the &#039;&#039;implies&#039;&#039; tag in the config.&lt;br /&gt;
:- The first environment specified in the arg &#039;&#039;env&#039;&#039; will be processed as expected with all children.&lt;br /&gt;
:- Recursive &#039;&#039;implies&#039;&#039; from an environment added via &#039;&#039;implies&#039;&#039; is not performed. (No children&#039;s children)&lt;br /&gt;
:- Only the first environment which is specified in the &#039;&#039;env&#039;&#039; arg with implies is processed, all additional values in the arg &#039;&#039;env&#039;&#039; will be ignored.&lt;br /&gt;
:- If the environment in the arg &#039;&#039;env&#039;&#039; it is not the first value, then it must also use the &#039;&#039;implies&#039;&#039; config to implies itself. Otherwise only child are processed.&lt;br /&gt;
&lt;br /&gt;
==== classes ====&lt;br /&gt;
Defines the available device classes.  Devices of different classes (e.g. phones and gateways) can have different update scripts. The device class is derived from the &amp;lt;code&amp;gt;#t&amp;lt;/code&amp;gt; (device type) query arg of the update script URL (which is why you must configure it in the update URL).  By default, the classes &#039;&#039;phone&#039;&#039;, &#039;&#039;opus_phone&#039;&#039;, &#039;&#039;pre_opus_phone&#039;&#039;, &#039;&#039;phone_oldui&#039;&#039;, &#039;&#039;phone_newui&#039;&#039;, &#039;&#039;mobile&#039;&#039;, &#039;&#039;gw&#039;&#039;, &#039;&#039;fxogw&#039;&#039;, &#039;&#039;fxsgw&#039;&#039;, &#039;&#039;brigw&#039;&#039;, &#039;&#039;prigw&#039;&#039; are recognized (newer versions may include more and/or updated class definitions).   Also, any device is considered to be member of a class that has the device type as class-name.  For example, an IP112 is in a class called &#039;&#039;ip112&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
A given device can be in multiple classes and will execute all update scripts available for these classes.&lt;br /&gt;
&lt;br /&gt;
==== classes/class ====&lt;br /&gt;
Each &#039;&#039;class&#039;&#039; has a number of sub-tags of type &#039;&#039;model&#039;&#039;. It contains the value replaced for the &amp;lt;code&amp;gt;#t&amp;lt;/code&amp;gt; query arg.  The models listed belong to the class.&lt;br /&gt;
; classes/class/@id :  the name of the class&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;classes&amp;gt;&lt;br /&gt;
        &amp;lt;class id=&amp;quot;gw&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;ip0010&amp;lt;/model&amp;gt;&lt;br /&gt;
            ...&lt;br /&gt;
        &amp;lt;/class&amp;gt;&lt;br /&gt;
        &amp;lt;class id=&amp;quot;phone&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;ip110&amp;lt;/model&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;ip232&amp;lt;/model&amp;gt;&lt;br /&gt;
            ...&lt;br /&gt;
        &amp;lt;/class&amp;gt;&lt;br /&gt;
        &amp;lt;class id=&amp;quot;phone_oldui&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;ip110&amp;lt;/model&amp;gt;&lt;br /&gt;
            ...&lt;br /&gt;
        &amp;lt;/class&amp;gt;&lt;br /&gt;
        &amp;lt;class id=&amp;quot;phone_newui&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;model&amp;gt;ip232&amp;lt;/model&amp;gt;&lt;br /&gt;
            ...&lt;br /&gt;
        &amp;lt;/class&amp;gt;&lt;br /&gt;
    &amp;lt;/classes&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== nobootdev ====&lt;br /&gt;
Device types listed here do not receive boot code updates.&lt;br /&gt;
===== nobootdev/model =====&lt;br /&gt;
Each model tag defines a device type that shall not receive boot code updates.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;nobootdev&amp;gt; &lt;br /&gt;
        &amp;lt;model&amp;gt;ipva&amp;lt;/model&amp;gt;&lt;br /&gt;
        &amp;lt;model&amp;gt;ipvadec&amp;lt;/model&amp;gt;&lt;br /&gt;
        &amp;lt;model&amp;gt;swphone&amp;lt;/model&amp;gt;&lt;br /&gt;
        &amp;lt;model&amp;gt;mypbxa&amp;lt;/model&amp;gt;&lt;br /&gt;
        &amp;lt;model&amp;gt;mypbxi&amp;lt;/model&amp;gt;&lt;br /&gt;
    &amp;lt;/nobootdev&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== nofirmdev ====&lt;br /&gt;
Device types listed here do not receive firmware updates.&lt;br /&gt;
===== nofirmdev/model =====&lt;br /&gt;
Each model tag defines a device type that shall not receive firmware updates.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;nofirmdev&amp;gt; &lt;br /&gt;
        &amp;lt;model&amp;gt;swphone&amp;lt;/model&amp;gt;&lt;br /&gt;
        &amp;lt;model&amp;gt;mypbxi&amp;lt;/model&amp;gt;&lt;br /&gt;
    &amp;lt;/nofirmdev&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== filenames ====&lt;br /&gt;
Available from build 2014. Allows you to define alternate firmware and boocode names for use with the &amp;lt;code&amp;gt;{filename}&amp;lt;/code&amp;gt; replacement (see the &#039;&#039;fwstorage&#039;&#039; tag), if required.&lt;br /&gt;
&lt;br /&gt;
===== filenames/model =====&lt;br /&gt;
Each model defines a set of alternative file names for a certain device type.&lt;br /&gt;
; filenames/model/@id : the (lowercase) device type identfier (e.g. &amp;lt;code&amp;gt;ip112&amp;lt;/code&amp;gt;). If this matches the device type of the calling device, the alternate file names are replaced&lt;br /&gt;
; filenames/model/@prot: the alternate firmware file name&lt;br /&gt;
; filenames/model/@boot: the alternate boot file name&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;filenames&amp;gt;&lt;br /&gt;
        &amp;lt;model id=&amp;quot;mypbxa&amp;quot; prot=&amp;quot;mypbx.apk&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/filenames&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
defines the firmware file name &amp;lt;code&amp;gt;mypbx.apk&amp;lt;/code&amp;gt; for the device type &amp;lt;code&amp;gt;mypbxa&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== stdargs ====&lt;br /&gt;
Better don&#039;t touch :-)&lt;br /&gt;
&lt;br /&gt;
==== customcerts ====&lt;br /&gt;
innovaphone hardware devices come with a device specific, trust-able &#039;&#039;device certificate&#039;&#039;.  However, in many situations it is desirable to roll-out customer-created &#039;&#039;custom  certificates&#039;&#039; to all devices.  The update server can do this.  This will replace the shipped devices certificates both on hardware devices (where all such certificates are derived from innovaphone&#039;s certificate authority) as well as on soft devices which run with a self.-signed certificate by default (such as the software-phone or &#039;&#039;myPBX for Android/iOS&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
; customcerts/@dir : the name of the directory underneath your installation directory which stores device certificates. you should make sure that this directory cannot be accessed without proper authentication&lt;br /&gt;
; customcerts/@CAkeys : a file name pattern (e.g. &amp;lt;code&amp;gt;CAkey*&amp;lt;/code&amp;gt;).  All files in &#039;&#039;customcerts/@dir&#039;&#039; which match the pattern must contain DER or PEM encoded public keys which form the &#039;&#039;certificate chain&#039;&#039; of your CA (usually it is only one and the public key of your CA). One key per file.  The files, when sorted by name, must contain the CA key itself in the last file (any intermediate certificates, if any, in the other files in correct order)&lt;br /&gt;
; customcerts/@CAtype : must be &amp;lt;code&amp;gt;manual&amp;lt;/code&amp;gt; currently&lt;br /&gt;
; customcerts/@CAname : a comma-separated list of CA names.  Devices presenting a certificate signed by one of these CAs will be considered as having a valid certificate.  Otherwise, they wil be instructed to create a &#039;&#039;certificate signing request&#039;&#039; (CSR) for subsequent submission to your CA&lt;br /&gt;
; customcerts/@CAnamesep : defines the name separator for &#039;&#039;customcerts/@CAname&#039;&#039;.  The default is &#039;&amp;lt;code&amp;gt;,&amp;lt;/code&amp;gt;&#039; and you must change it to a different value if one of your CAs includes a comma in its name&lt;br /&gt;
; customcerts/@renew : if set and not 0, certificates are replaced by new ones &#039;&#039;n&#039;&#039; days before they expire&lt;br /&gt;
; customcerts/@CAwildcard : normally, the update server will accept a certificate only if its CN matches the device&#039;s serial number.  However, sometimes, so-called &#039;&#039;wildcard certificates&#039;&#039; such as &amp;lt;code&amp;gt;*.innovaphone.com&amp;lt;/code&amp;gt; are used on a device (e.g. on a PBX or on a &#039;&#039;reverse proxy&#039;&#039;).  If set, the update server will also accept a certificate that contains a CN which equals the value of &#039;&#039;customcerts/@CAwildcard&#039;&#039;. Note that the CN must match literally.  For example, if &#039;&#039;&#039;&#039;customcerts/@CAwildcard&#039;&#039; is set to &amp;lt;code&amp;gt;*.innovaphone.com&amp;lt;/code&amp;gt; a CN like &amp;lt;code&amp;gt;host.innovaphone.com&amp;lt;/code&amp;gt; is not accepted&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When the update server determines that a device calls in with an un-trusted or expired certificate, it will have it create a signing-request for a new certificate.  The requested certificate properties can be defined:&lt;br /&gt;
&lt;br /&gt;
; customcerts/@CSRkey : the key size, e.g. &amp;lt;code&amp;gt;2048-bit&amp;lt;/code&amp;gt;. Note that we do not recommend keys larger than 2048 bit (see [[Reference7:Certificate_management#Certificate_Key_Length_and_CPU_Usage]] for details)&lt;br /&gt;
; customcerts/@CSRsignature : the signature algorithm, e.g. &amp;lt;code&amp;gt;SH256&amp;lt;/code&amp;gt;&lt;br /&gt;
; customcerts/@CSRdn-cn : the CN (&#039;&#039;common name&#039;&#039;) part used for the DN&lt;br /&gt;
; customcerts/@CSRdn-ou : the OU (&#039;&#039;organizational unit&#039;&#039;) part used for the DN&lt;br /&gt;
; customcerts/@CSRdn-o : the O (&#039;&#039;organization&#039;&#039;) part used for the DN&lt;br /&gt;
; customcerts/@CSRdn-l : the L (&#039;&#039;locality&#039;&#039;) part used for the DN&lt;br /&gt;
; customcerts/@CSRdn-st : the ST (&#039;&#039;state or province&#039;&#039;) part used for the DN&lt;br /&gt;
; customcerts/@CSRdn-c : the C (&#039;&#039;country&#039;&#039;) part used for the DN (note: &#039;&#039;CSRdn&#039;&#039; for many CAs, must be a 2-letter ISO country code)&lt;br /&gt;
; customcerts/@CSRsan-dns-1 : the first of up to three DNS names &lt;br /&gt;
; customcerts/@CSRsan-ip-1 : the first of up to two IP addresses&lt;br /&gt;
&lt;br /&gt;
Within the set of CSR attributes, the following meta-words will be replaced:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;{realip}&amp;lt;/code&amp;gt; : the real IP address of the device as reported in the &amp;lt;code&amp;gt;ip=#i&amp;lt;/code&amp;gt; query argument&lt;br /&gt;
* &amp;lt;code&amp;gt;{ip}&amp;lt;/code&amp;gt; : the IP address of the device as seen by the update server&lt;br /&gt;
* &amp;lt;code&amp;gt;{proxy}&amp;lt;/code&amp;gt; : the IP address of the reverse proxy the device used to reach the update server&lt;br /&gt;
* &amp;lt;code&amp;gt;{sn}&amp;lt;/code&amp;gt; : the serial number of the device as reported in the &amp;lt;code&amp;gt;sn=#m&amp;lt;/code&amp;gt; query argument (e.g. &amp;lt;code&amp;gt;009033030df0&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;code&amp;gt;{hwid}&amp;lt;/code&amp;gt; : the hardware-id of the device as reported in the &amp;lt;code&amp;gt;sn=#m&amp;lt;/code&amp;gt; query argument (e.g. &amp;lt;code&amp;gt;IP1200-03-0d-f0&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;code&amp;gt;{name}&amp;lt;/code&amp;gt; : the &#039;&#039;Device Name&#039;&#039; (set in &#039;&#039;General/Admin&#039;&#039;) of the device&lt;br /&gt;
* &amp;lt;code&amp;gt;{rdns}&amp;lt;/code&amp;gt; : the DNS name found in a reverse DNS lookup for the real-ip address reported by the device (see &#039;&#039;{realip}&#039;&#039;) above&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;customcerts &lt;br /&gt;
        dir=&amp;quot;certs&amp;quot; &lt;br /&gt;
        CAkeys=&amp;quot;CAkey*&amp;quot; &lt;br /&gt;
        CAtype=&amp;quot;manual&amp;quot; &lt;br /&gt;
        CAname=&amp;quot;innovaphone-INNO-DC-W2K8-Zertifizierungsserver&amp;quot; &lt;br /&gt;
        CAnamesep=&amp;quot;,&amp;quot; &lt;br /&gt;
        CAwildcard=&amp;quot;*.innovaphone.com&amp;quot;&lt;br /&gt;
        CSRkey=&amp;quot;2048-bit&amp;quot; &lt;br /&gt;
        CSRsignature=&amp;quot;SH256&amp;quot; &lt;br /&gt;
        CSRdn-cn=&amp;quot;{hwid}&amp;quot; &lt;br /&gt;
        CSRdn-ou=&amp;quot;&amp;quot; &lt;br /&gt;
        CSRdn-o=&amp;quot;&amp;quot; &lt;br /&gt;
        CSRdn-l=&amp;quot;&amp;quot; &lt;br /&gt;
        CSRdn-st=&amp;quot;&amp;quot; &lt;br /&gt;
        CSRdn-c=&amp;quot;&amp;quot; &lt;br /&gt;
        CSRsan-dns-1=&amp;quot;{name}.company.com&amp;quot; &lt;br /&gt;
        CSRsan-dns-2=&amp;quot;{hwid}.company.com&amp;quot; &lt;br /&gt;
        CSRsan-dns-3=&amp;quot;{rdns}&amp;quot; &lt;br /&gt;
        CSRsan-ip-1=&amp;quot;{realip}&amp;quot; &lt;br /&gt;
        CSRsan-ip-2=&amp;quot;&amp;quot; &lt;br /&gt;
        renew=&amp;quot;90&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== queries ====&lt;br /&gt;
If queries are defined and applicable for the calling device, it will be instructed to send certain information to the update server which will be stored in the device status file kept on the server.  Each piece of such information is defined using a separate &#039;&#039;query&#039;&#039; tag.&lt;br /&gt;
&lt;br /&gt;
; queries/@scfg : defines the URL used by the device to send the information.  Normally not changed from the default&lt;br /&gt;
&lt;br /&gt;
==== queries/query ====&lt;br /&gt;
Defines one piece of information to be submitted to the update server.&lt;br /&gt;
&lt;br /&gt;
; queries/query/@id : a unique name for the query&lt;br /&gt;
; queries/query/@title : a title for this piece of information shown in the device status&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;.&lt;br /&gt;
        &amp;lt;!-- retrieve and show some details from IP4/General/STUN page --&amp;gt;&lt;br /&gt;
        &amp;lt;query id=&amp;quot;media&amp;quot; title=&amp;quot;Media&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;cmd&amp;gt;mod cmd MEDIA xml-info&amp;lt;/cmd&amp;gt;&lt;br /&gt;
            &amp;lt;applies&amp;gt;*&amp;lt;/applies&amp;gt;&lt;br /&gt;
            &amp;lt;show title=&amp;quot;NAT&amp;quot;&amp;gt;concat(/state/queries/media/info/nat/@result, &#039; (&#039;, /state/queries/media/info/nat/@public-addr, &#039;)&#039;)&amp;lt;/show&amp;gt;&lt;br /&gt;
            &amp;lt;show title=&amp;quot;Server&amp;quot;&amp;gt;concat(&#039;STUN: &#039;, /state/queries/media/info/@stun, &#039; TURN: &#039;, /state/queries/media/info/@turn, &#039; (&#039;, /state/queries/media/info/@turn-user, &#039;)&#039;)&amp;lt;/show&amp;gt;&lt;br /&gt;
        &amp;lt;/query&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;!-- show primary phone registration --&amp;gt;&lt;br /&gt;
        &amp;lt;query id=&amp;quot;registration&amp;quot; title=&amp;quot;Registration&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;cmd&amp;gt;mod cmd PHONE/USER phone-regs /cmd phone-regs&amp;lt;/cmd&amp;gt;&lt;br /&gt;
            &amp;lt;applies&amp;gt;phone&amp;lt;/applies&amp;gt;&lt;br /&gt;
            &amp;lt;show title=&amp;quot;State: User/Number&amp;quot;&amp;gt;concat(/state/queries/registration/info/reg[@id = &amp;quot;0&amp;quot;]/@state, &#039;: &#039; , /state/queries/registration/info/reg[@id = &amp;quot;0&amp;quot;]/@h323, &#039;/&#039;, /state/queries/registration/info/reg[@id = &amp;quot;0&amp;quot;]/@e164)&amp;lt;/show&amp;gt;&lt;br /&gt;
            &amp;lt;show title=&amp;quot;PBX/ID&amp;quot;&amp;gt;concat(/state/queries/registration/info/reg[@id = &amp;quot;0&amp;quot;]/@gk-addr, &#039;/&#039;, /state/queries/registration/info/reg[@id = &amp;quot;0&amp;quot;]/@gk-id)&amp;lt;/show&amp;gt;&lt;br /&gt;
        &amp;lt;/query&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== queries/query/cmd ====&lt;br /&gt;
The content of this tag defines the command to be executed on the device which outputs the requested information. These are &#039;&#039;mod cmd&#039;&#039;s typically.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;!-- get info for custom certificates --&amp;gt;&lt;br /&gt;
            &amp;lt;cmd&amp;gt;mod cmd X509 xml-info&amp;lt;/cmd&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See [[Howto:Effect_arbitrary_Configuration_Changes_using_a_HTTP_Command_Line_Client_or_from_an_Update#Using_the_Mechanism_for_Device_Status_Queries ]] for details on how to find out which commands to use.&lt;br /&gt;
&lt;br /&gt;
==== queries/query/applies ====&lt;br /&gt;
Defined queries are only executed by devices which belong to the class that is given as tag content.  If the &#039;&#039;env&#039;&#039; atribute is set, the tag content is interpreted as an &#039;&#039;environment&#039;&#039; name which has to match.&lt;br /&gt;
&lt;br /&gt;
; queries/query/applies/@env : if this attribute exists, the tag content is compared with the environments the device is in.  Otherwise, it is compared with the classes it is in (unfortunately, you can not combine both)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- applied to phones only --&amp;gt;&lt;br /&gt;
&amp;lt;applies&amp;gt;phone&amp;lt;/applies&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== queries/query/show====&lt;br /&gt;
If one or more  &#039;&#039;show&#039;&#039; tags are defined for the &#039;&#039;query&#039;&#039; tag, the data will be shown in the device status page.  The values shown are defined by the tag content which is an XPath expression selecting the data from the device state.  The XPath expression always begins with &amp;lt;code&amp;gt;/state/queries/&amp;lt;/code&amp;gt;&#039;&#039;query-id&#039;&#039; (as defined by the &#039;&#039;id&#039;&#039; attribute in the query tag).  &lt;br /&gt;
&lt;br /&gt;
; queries/query/show/@title : used as title when the values are displayed in the status page&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;show title=&amp;quot;NAT&amp;quot;&amp;gt;concat(/state/queries/media/info/nat/@result, &#039; (&#039;, /state/queries/media/info/nat/@public-addr, &#039;)&#039;)&amp;lt;/show&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Hints for writing your update snippets ==&lt;br /&gt;
Writing update scripts is largely undocumented and sometimes tricky.  Here are some general guidelines.&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;config add/del&amp;lt;/code&amp;gt; ===&lt;br /&gt;
Many setting are done using &amp;lt;code&amp;gt;config change&amp;lt;/code&amp;gt; commands.  So these are very useful in update scripts too.&lt;br /&gt;
&lt;br /&gt;
The straight forward method to find out which commands you need is as follows:&lt;br /&gt;
* get a device of the type in question and do factory reset&lt;br /&gt;
* save the configuration to a file&lt;br /&gt;
* do the desired settings using the normal web admin UI&lt;br /&gt;
* save the resulting configuration to another file&lt;br /&gt;
* compare the saved files&lt;br /&gt;
&lt;br /&gt;
Usually, you want to set only specific parts of the configuration line.  For example, assume you want to set the default coder to &#039;&#039;OPUS-WB&#039;&#039;. Your saved configuration line might look like&lt;br /&gt;
&lt;br /&gt;
 config change PHONE SIG /prot SH323 /gk-addr pbx.innovaphone.com /gk-id innovaphone.com /tones 0 /lcoder OPUS-WB,20, /coder OPUS-WB,20,k1&lt;br /&gt;
&lt;br /&gt;
To set only the coder settings, you would set the relevant options with the &amp;lt;code&amp;gt;config add&amp;lt;/code&amp;gt; command as follows:&lt;br /&gt;
&lt;br /&gt;
 config add PHONE SIG /lcoder OPUS-WB,20,&lt;br /&gt;
 config add PHONE SIG /coder OPUS-WB,20,k1&lt;br /&gt;
&lt;br /&gt;
You can also remove specific options, as in &lt;br /&gt;
&lt;br /&gt;
 config rem PHONE SIG /tones&lt;br /&gt;
&lt;br /&gt;
which would remove the &amp;lt;code&amp;gt;/tones 0&amp;lt;/code&amp;gt; from the configuration line for &amp;lt;code&amp;gt;PHONE SIG&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Note that the PHP update server will add the&lt;br /&gt;
&lt;br /&gt;
 config write&lt;br /&gt;
 config activate &lt;br /&gt;
 iresetn&lt;br /&gt;
&lt;br /&gt;
at the end of the delivered script automatically, so you do not need to do it yourself.  In fact, it is not recommended to have any reset command in your snippets.&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;config change&amp;lt;/code&amp;gt; Lines with associated Passwords ====&lt;br /&gt;
Sometimes, there is a password associated with certain configurations.  Consider the STUN/TURN configuration: &lt;br /&gt;
&lt;br /&gt;
 config change MEDIA /stun stun.innovaphone.com /turn turn.innovaphone.com /turn-user innovaphone /turn-pwd 2 /nat-detect 61&lt;br /&gt;
&lt;br /&gt;
The TURN password, being sensitive, needs to be encrypted in your configuration.  This is why it is stored as a &#039;&#039;VAR&#039;&#039;, which provides encryption support (see below):&lt;br /&gt;
&lt;br /&gt;
 vars create MEDIA/TURN-PWD pc ....&lt;br /&gt;
&lt;br /&gt;
Unfortunately, the relationship between an option and an associated VAR needs to be guessed.  You can be sure that the module name in the &amp;lt;code&amp;gt;config change&amp;lt;/code&amp;gt; matches the modules name in the &amp;lt;code&amp;gt;vars create&amp;lt;/code&amp;gt; command. However, the variable name must be guessed. &lt;br /&gt;
&lt;br /&gt;
You can also set the password in your script using the &amp;lt;code&amp;gt;vars create&amp;lt;/code&amp;gt;&amp;lt;!-- , but this does make sense only in staging (that is pre-update-phase) scripts (see below for a discussion why). If you need to do it in a script snippet for the update phase, you should --&amp;gt;, however, you may also consider using a &amp;lt;code&amp;gt;mod cmd&amp;lt;/code&amp;gt; (see below) such as e.g.&lt;br /&gt;
&lt;br /&gt;
 mod cmd MEDIA form /cmd form /del %2Fstun-slow /stun stun.innovaphone.com /turn turn.innovaphone.com /turn-user innovaphone /turn-pwd my-turn-pw /nat-detect 61&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;vars create&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Sometimes it makes sense to use &amp;lt;code&amp;gt;vars create&amp;lt;/code&amp;gt; commands.  The syntax is&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; vars create &amp;lt;/code&amp;gt;&#039;&#039;&amp;lt;name&amp;gt; &amp;lt;flags&amp;gt; &amp;lt;value&amp;gt;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&amp;lt;name&amp;gt;&#039;&#039; is a module name followed by a variable name, optionally followed by an index.  For example, a phone will store the currently selected main registration as &amp;lt;code&amp;gt;vars create PHONE/ACTIVE-USER p &amp;lt;/code&amp;gt;&#039;&#039;&amp;lt;index&amp;gt;&#039;&#039;.  So the module is &amp;lt;code&amp;gt;PHONE&amp;lt;/code&amp;gt; and the variable name is &amp;lt;code&amp;gt;ACTIVE-USER&amp;lt;/code&amp;gt;.  When the variable is multi-valued, an index is added to the name.  For example, the registration settings for all but the first registration are stored as indexed variable, as in &amp;lt;code&amp;gt;vars create PHONE/USER-REG/00001 p &amp;lt;/code&amp;gt;&#039;&#039;&amp;lt;settings&amp;gt;&#039;&#039;, where &amp;lt;code&amp;gt;00001&amp;lt;/code&amp;gt; is the index (registrations count from 0 in this case).&lt;br /&gt;
&lt;br /&gt;
There are a number of flags which can be combined, the most prominent used in update scripts are:&lt;br /&gt;
; p : permanent.  The var is stored in flash memory (you will almost always use this flag in update scripts)&lt;br /&gt;
; b : binary. The var value is binary.  Its &#039;&#039;&amp;lt;value&amp;gt;&#039;&#039; is given as a bin2hex string&lt;br /&gt;
; c : crypted.  The var value needs to be encrypted and the &#039;&#039;&amp;lt;value&amp;gt;&#039;&#039; given is crypted&lt;br /&gt;
; x : crypted, plain value.  The var needs to be encrypted but the &#039;&#039;&amp;lt;value&amp;gt;&#039;&#039; is given as plain (that is, un-encrypted) text. This allows you to set an encrypted variable without encrypting the desired value&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
undocumented flags&lt;br /&gt;
; h : hidden. The value is not shown in config dump&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
; l : log. Creates trace output whenever this VAR is modified&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
; a : auto-index.  ???&lt;br /&gt;
; u : unique, ???&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
; n : no-reset. If the &#039;n&#039; flag is given, setting the variable will not trigger the &#039;reset needed&#039; condition.  Whether or not setting a variable has an effect without a reset depends on the module using the variable.  Unfortunately, there is no documentation on which variables this works for, and we do not intend to provide such documentation.  In the end, you have to try it out. &lt;br /&gt;
; s : suppressed. Excludes the VAR from config download with standard password.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
; i : init. ???&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
Please note that, unless the &#039;n&#039; flag is given, using &amp;lt;code&amp;gt;vars create&amp;lt;/code&amp;gt; will &#039;&#039;always&#039;&#039; set the internal &#039;&#039;reset needed condition&#039;&#039; in the device (regardless which &#039;&#039;&amp;lt;value&amp;gt;&#039;&#039; is set, even when the current value is set again).  This means that a subsequent &amp;lt;code&amp;gt;resetn&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;iresetn&amp;lt;/code&amp;gt; will always trigger a reset.  So if you use it, make sure that you use the &#039;&#039;times/@check&#039;&#039; ([[#times | see above]]) to protect your script from re-executing the snippet (and thus rebooting the device) all the time. &lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
When you use a &amp;lt;code&amp;gt;mod cmd UP1 check ...&amp;lt;/code&amp;gt; command in your script (see times/@check [[#times | above]]), this will create an endless loop if you use &amp;lt;code&amp;gt;vars create&amp;lt;/code&amp;gt; followed by one of the &amp;lt;code&amp;gt;resetn&amp;lt;/code&amp;gt; commands in the code guarded by the &amp;lt;code&amp;gt;check&amp;lt;/code&amp;gt; command. This code will never be fully executed, as the &#039;&#039;reset needed&#039;&#039; condition will always be set and the reset will always happen.  You can use it in &#039;&#039;pre-update-phase&#039;&#039; scripts (that is, during the staging process) as this is not protected by a &amp;lt;code&amp;gt;check&amp;lt;/code&amp;gt; command.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Using &amp;lt;code&amp;gt;mod cmd&amp;lt;/code&amp;gt; ===&lt;br /&gt;
See [[Howto:Effect arbitrary Configuration Changes using a HTTP Command Line Client or from an Update]] for a discussion of how to use &amp;lt;code&amp;gt;mod cmd&amp;lt;/code&amp;gt; in update scripts.&lt;br /&gt;
&lt;br /&gt;
== Writing your own Dynamic Scripting Code ==&lt;br /&gt;
NB: this feature is available from build 2020.&lt;br /&gt;
&lt;br /&gt;
By default, the update server delivers update scripts which are composed from a number of static files (so-called &#039;&#039;snippets&#039;&#039;).  Sometimes it makes sense however, to create such snippets dynamically (e.g. based on a database lookup).  Here is how to do this.&lt;br /&gt;
&lt;br /&gt;
Dynamic scripting is implemented by a user-supplied custom &amp;lt;code&amp;gt;class CustomUpdateSnippet&amp;lt;/code&amp;gt;.  The code for this class must be placed in to the file &amp;lt;code&amp;gt;config/scripting.class.php&amp;lt;/code&amp;gt;.  As a starter, sample class code is available in &amp;lt;code&amp;gt;config/scripting.class-sample.php&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * to provide your own runtime generated snippets, rename this file to &#039;scripting.class.php&#039; and &lt;br /&gt;
 * implement the member functions&lt;br /&gt;
 * $property will have one member called &lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
class CustomUpdateSnippet extends UpdateSnippet {&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * snippet to deliver after standard text snippets&lt;br /&gt;
     * @return array of string&lt;br /&gt;
     */&lt;br /&gt;
    public function getPostSnippet() {&lt;br /&gt;
        return parent::getPostSnippet();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * snippet to deliver before standard text snippets&lt;br /&gt;
     * @return array of strings&lt;br /&gt;
     */&lt;br /&gt;
    public function getPreSnippet() {&lt;br /&gt;
        return parent::getPreSnippet();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /** &lt;br /&gt;
     * do we want to suppress the standard text snippets?&lt;br /&gt;
     * @return boolean&lt;br /&gt;
     */&lt;br /&gt;
    public function sendStandardSnippets() {&lt;br /&gt;
        return parent::sendStandardSnippets();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The sample code overrides of the classes member functions just call the base classes which do nothing at all. So if you just copy the sample code into &amp;lt;code&amp;gt;scripting.class.php&amp;lt;/code&amp;gt;, nothing will change.  However, if &amp;lt;code&amp;gt;getPreSnippet()&amp;lt;/code&amp;gt; returns an array of strings (the parent class function returns an empty array), each array member will be sent to the calling device &#039;&#039;before&#039;&#039; the standard snippets are sent.  Likewise, if &amp;lt;code&amp;gt;getPostSnippet()&amp;lt;/code&amp;gt; returns an array of strings (the parent class function returns an empty array), each array member will be sent to the calling device &#039;&#039;after&#039;&#039; the standard snippets are sent. If &amp;lt;code&amp;gt;sendStandardSnippets()&amp;lt;/code&amp;gt; returns false, the standard snippets will not be sent.&lt;br /&gt;
&lt;br /&gt;
To determine the dynamic snippets to send, the user-provided &amp;lt;code&amp;gt;class CustomUpdateSnippet&amp;lt;/code&amp;gt; has access to the members of its base &amp;lt;code&amp;gt;class UpdateSnippet&amp;lt;/code&amp;gt;, namely the &amp;lt;code&amp;gt;var $statexml&amp;lt;/code&amp;gt; member. This member contains a &amp;lt;code&amp;gt;SimpleXMLElement&amp;lt;/code&amp;gt; object with all state information available for the calling device.&lt;br /&gt;
&lt;br /&gt;
Here is a sample state found in &amp;lt;code&amp;gt;$statexml&amp;lt;/code&amp;gt; (as output by the &amp;lt;code&amp;gt;dump()&amp;lt;/code&amp;gt; member function): &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;state seen=&amp;quot;1522065435&amp;quot; requested=&amp;quot;130774bootcode&amp;quot; phase=&amp;quot;update&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;device sn=&amp;quot;00-90-33-3e-0c-57&amp;quot; type=&amp;quot;IP112&amp;quot; classes=&amp;quot;phone, opus_phone, phone_newui, hstrace, ip112&amp;quot; ip=&amp;quot;127.0.0.1&amp;quot; rp=&amp;quot;false&amp;quot; phase=&amp;quot;update&amp;quot;&lt;br /&gt;
    environments=&amp;quot;sifi, 172net&amp;quot; certstat=&amp;quot;either certificate handling or state tracking not enabled - not doing any certificate checking&amp;quot; hwid=&amp;quot;IP222-46-5c-77&amp;quot; realip=&amp;quot;172.16.80.241&amp;quot; requestDownloaded=&amp;quot;false&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;firmware requested=&amp;quot;130986&amp;quot; requested-at=&amp;quot;1522065435&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;bootcode requested-at=&amp;quot;1522065435&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;config filename=&amp;quot;scripts/all-all-all.txt&amp;quot; delivered=&amp;quot;1522065426&amp;quot; version=&amp;quot;1486559970&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/state&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The most interesting elements in this XML are probably the attributes of the &amp;lt;code&amp;gt;state&amp;lt;/code&amp;gt; and the &amp;lt;code&amp;gt;device&amp;lt;/code&amp;gt; tags.&lt;br /&gt;
&lt;br /&gt;
== Hints for using custom SSL Certificates ==&lt;br /&gt;
&lt;br /&gt;
Using your own SSL certificates can be useful depending on the scenario.&lt;br /&gt;
&lt;br /&gt;
We have two methods to accomplish this:&lt;br /&gt;
&lt;br /&gt;
=== Standard scenario as described in this wiki article ===&lt;br /&gt;
The idea is that each certificate request is checked manually, edited and the UpdateServer is provided with the new device certificate.&lt;br /&gt;
&lt;br /&gt;
=== Special scenario with automated certificate renewal ===&lt;br /&gt;
The idea is that every new/unknown (untrusted) device connects to the staging server. Here the device is released by manual checking/authorization by getting its first certificate. All further extensions can happen automatically afterwards.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important: All important settings concerning file permissions, access and co must be used from the above article and are only skipped in this part!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
We will create two Update-Server instances with the following configuration.&lt;br /&gt;
&lt;br /&gt;
# Staging Server (HTTPS/443)&lt;br /&gt;
#*Put the sources in &amp;lt;code&amp;gt;/var/www/innovaphone/update&amp;lt;/code&amp;gt;&lt;br /&gt;
#*Use your specific SSL configuration &#039;&#039;&amp;lt;customcerts&amp;gt;&#039;&#039; as described [[#customcerts | above]].&lt;br /&gt;
#*Use the following settings in the configuration of &#039;&#039;&amp;lt;times&amp;gt;&#039;&#039;:&lt;br /&gt;
#*:&amp;lt;code&amp;gt;force https = &amp;quot;true&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
#*:&amp;lt;code&amp;gt;httpsport = &amp;quot;444&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
#*:&amp;lt;code&amp;gt;force trust = &amp;quot;true&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
#*:&amp;lt;code&amp;gt;httpsurlmod = &amp;quot;!update/i!!&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
#*Activate the query &#039;&#039;certificates&#039;&#039; as described [[#Delivering_Custom_Certificates | above]]&lt;br /&gt;
#*Configure the firmware update via the master tag as described [[#Delivering_Firmware_and_Boot_Code| above]]&lt;br /&gt;
#* &#039;&#039;&#039;Important&#039;&#039;&#039;: Do not submit any further customer specific device configurations in the staging Server&lt;br /&gt;
# Final MTLS / 444 update server&lt;br /&gt;
#*Put the sources in &amp;lt;code&amp;gt;/var/www/innovaphone/mts&amp;lt;/code&amp;gt;&lt;br /&gt;
#*Use your specific SSL configuration &#039;&#039;&amp;lt;customcerts&amp;gt;&#039;&#039; as described [[#customcerts | above]] with &amp;lt;code&amp;gt;renew = &amp;quot;x&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
#*Use the following settings in the configuration of &#039;&#039;&amp;lt;times&amp;gt;&#039;&#039;:&lt;br /&gt;
#*:&amp;lt;code&amp;gt;force https = &amp;quot;true&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
#*:&amp;lt;code&amp;gt;httpsport = &amp;quot;444&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
#*:&amp;lt;code&amp;gt;force trust = &amp;quot;true&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
#*:&amp;lt;code&amp;gt;httpsurlmod = &amp;quot;!mtls/i!!&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
#*Activate the query &#039;&#039;certificates&#039;&#039; as described [[#Delivering_Custom_Certificates | above]]&lt;br /&gt;
#*Configure the firmware update via the master tag as described [[#Delivering_Firmware_and_Boot_Code | above]]&lt;br /&gt;
#*Store all customer specific device configurations&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The meaning of the two different instances is:&lt;br /&gt;
*The staging server &amp;lt;code&amp;gt;https://[ip]/update/admin/admin.php&amp;lt;/code&amp;gt; will generate the provisioning URLs for new devices.&lt;br /&gt;
*All new/unknown (untrusted) devices are only in the staging server.&lt;br /&gt;
**Here you can check the devices and provide them a valid certificate after check/authorization.&lt;br /&gt;
*With a valid certificate, the UpdateURL is automatically changed to the MTLS instance.&lt;br /&gt;
*As soon as a device connects via MTLS we trust this device and we can use an automatic extension of the certificates.&lt;br /&gt;
** Waiting CSR requests are in the configured folder &#039;&#039;certs&#039;&#039; in the notation &amp;lt;code&amp;gt;&amp;quot;[mac]-request.p10.pem&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
** If you operate your own CA, feel free to automate the reissue of the certificates via a sheduled Cronjob&lt;br /&gt;
*** Help for Linux: [[Howto:Creating_custom_Certificates_using_a_OpenSSL_Certificate_Authority]]&lt;br /&gt;
*** Help for Windows: [[Howto:Creating_custom_Certificates_using_a_Windows_Certificate_Authority]]&lt;br /&gt;
** If a signed certificate with the format &amp;lt;code&amp;gt;&amp;quot;[mac]-signedrequest.cer&amp;quot;&amp;lt;/code&amp;gt; is placed in the certs folder, the certificate is automatically updated on the device.&lt;br /&gt;
&lt;br /&gt;
== Optional Configurations on the Linux Application Platform ==&lt;br /&gt;
===Support for more Connections===&lt;br /&gt;
By default the LAP&#039;s web server lighttpd allows for 512 concurrent connections with 1024 open file descriptors.  When you serve a huge number of devices with the update server, then this might be too low.  You will see some devices not being able to contact the update server for a while.  This should not be a real issue as the devices will retry.  However, updating all devices may take long due to this.&lt;br /&gt;
&lt;br /&gt;
In the lighttpd log (in &amp;lt;code&amp;gt;/var/log/lighttpd&amp;lt;/code&amp;gt; on the LAP), you will see entries like this:&lt;br /&gt;
&lt;br /&gt;
 2017-10-16 13:45:18: (network_linux_sendfile.c.140) open failed:  Too many open files &lt;br /&gt;
 2017-10-16 13:45:18: (mod_fastcgi.c.3075) write failed: Too many open files 24 &lt;br /&gt;
 2017-10-16 13:45:18: (server.c.1434) [note] sockets disabled, out-of-fds &lt;br /&gt;
 2017-10-16 16:23:25: (response.c.634) file not found ... or so:  Too many open files /mtls/updatev2/web/innovaphone_logo_claim_fisch.png -&amp;gt;&lt;br /&gt;
 2017-10-16 17:57:45: (server.c.1432) [note] sockets disabled, connection limit reached &lt;br /&gt;
&lt;br /&gt;
If you experience such issues, proceed as follows:&lt;br /&gt;
&lt;br /&gt;
* connect to the LAP with SFTP (e.g. using WinSCP)&lt;br /&gt;
* change directory to &amp;lt;code&amp;gt;/etc/lighttpd&amp;lt;/code&amp;gt;&lt;br /&gt;
* edit &amp;lt;code&amp;gt;lighttpd.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
* search for the 2 lines which set &amp;lt;code&amp;gt;server.max-fds&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;server.max-connections&amp;lt;/code&amp;gt;&lt;br /&gt;
* replace the standard values.  We recommend to set the number of file descriptors to 4 times the number of requests when using the update server, e.g. &lt;br /&gt;
: old&lt;br /&gt;
:: server.max-fds             = 1024&lt;br /&gt;
:: server.max-connections     =  512&lt;br /&gt;
: new&lt;br /&gt;
:: server.max-fds             = 8000&lt;br /&gt;
:: server.max-connections     =  2000&lt;br /&gt;
* save the file&lt;br /&gt;
* restart linux (&#039;&#039;Diagnostics/Reset/Reboot&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
Be sure to closely monitor the &#039;&#039;Diagnostics/Status&#039;&#039; page for a while after such configuration.  &lt;br /&gt;
&lt;br /&gt;
Also, when you update the LAP, you will have to re-do the changes (as always when you change something &#039;&#039;under the hood&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
=== Debug files rotation based on logrotate ===&lt;br /&gt;
If you have to debug during operation and a lot of devices access the PHP Update Server V2, you have to keep track of the debug files or automatically limit them. For this you can use logrotate on the innovaphone Linux AP. With logrotate you can apply time-based or size-based rules when files are packed and when they are deleted.&lt;br /&gt;
* open the LAP&#039;s file system using a SFTP client such as e.g. [https://winscp.net/eng/index.php WinSCP] (if you have not yet changed it, the default credentials will be &amp;lt;code&amp;gt;root/iplinux&amp;lt;/code&amp;gt;, see [[Reference10:Concept_Linux_Application_Platform#Default_Credentials | Concept Linux Application Platform]]). Note that you must use SFTP rather than WebDAV, as WebDAV will not give access to the executable web server files. &lt;br /&gt;
* Under the path &amp;lt;code&amp;gt;/etc/logrotate.d&amp;lt;/code&amp;gt; create a file e.g. &amp;lt;code&amp;gt;updateserver&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/etc/logrotate.d/updateserver&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this file now enter the following content and save it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 /var/www/innovaphone/mtls/update/debug/*.txt {&lt;br /&gt;
 size 5M&lt;br /&gt;
 missingok&lt;br /&gt;
 rotate 2&lt;br /&gt;
 compress&lt;br /&gt;
 delaycompress&lt;br /&gt;
 notifempty&lt;br /&gt;
 create 644 www-data www-data&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will include all *.txt files from the debug directory of the PHP Update Server V2 in the logrotate process of the operating system.&lt;br /&gt;
&lt;br /&gt;
; size 5M : means every 5MB the file is rotated or zipped&lt;br /&gt;
; size 5k : means every 5kB the file is rotated or zipped&lt;br /&gt;
Alternatively, you can also rotate the file based on time&lt;br /&gt;
; daily : means that every day the file is rotated or zipped&lt;br /&gt;
; weekly : means that the file is rotated or zipped daily&lt;br /&gt;
&lt;br /&gt;
; missingok : if a debug file does not exist, it will be ignored&lt;br /&gt;
; rotate n : files are removed before the last ones are deleted.&lt;br /&gt;
; compress : compresses the old debug files&lt;br /&gt;
; delaycompress : compresses the debug data only after it has been moved once&lt;br /&gt;
; notifempty : empty log files are not rotated&lt;br /&gt;
; create 644 www-data www-data : creates a new, empty debug file with appropriate permissions&lt;br /&gt;
&lt;br /&gt;
== Update Server and Reverse Proxy ==&lt;br /&gt;
It is possible to implement access to the update server through a &#039;&#039;reverse proxy&#039;&#039; (RP).  However, you have to keep some issues in mind:&lt;br /&gt;
* &#039;&#039;Mutual Transport Layer Security&#039;&#039; (MTLS) is not possible&lt;br /&gt;
: MTLS requires a direct TLS connection between the two parties. An RP however would terminate the TLS connection and entertain two independent connections to the parties.  This breaks MTLS.  If you want to use MTLS and serve external clients, you must therefore provide a direct access to the update server (that is an external IP address either directly or through port forwarding)&lt;br /&gt;
: see [[#If_you_want_to_setup_MTLS-restricted_Delivery_of_Update_Scripts]] for details&lt;br /&gt;
* When using the RP, you can choose to forward encrypted traffic (HTTPS) arriving from external to the update server using HTTP (unencrypted). The update server however eventually rewrites the update URL in the calling devices configuration.  In order to do this, it determines the type of the internal connection.  So if the connection from the RP to the update server is using HTTP, it would create a &#039;&#039;http://...&#039;&#039; URL.  Otherwise it would create an &#039;&#039;https://..&#039;&#039; URL (also, it would be using the same port). This way, if the RP forwards requests to the update server with HTTP, the synthesized new URL for the calling client would use HTTP too, even though the original request was sent with HTTPS.  This may or may not be what you want (as all of your clients would end up using non-encrypted traffic). Even worse, it might not work at all, if the RP does not accept HTTP for example.&lt;br /&gt;
&lt;br /&gt;
== Related Articles ==&lt;br /&gt;
* [[Reference10:Concept_Update_Server]]&lt;br /&gt;
* [[Reference12r1:DHCP_client]]&lt;br /&gt;
* [[Reference10:Concept_Linux_Application_Platform]]&lt;br /&gt;
* [[Reference10:Concept_Provisioning]]&lt;br /&gt;
* [[Howto:PHP_based_Update_Server]] (old version)&lt;br /&gt;
* [[Howto:Creating_custom_Certificates_using_a_OpenSSL_Certificate_Authority]]&lt;br /&gt;
* [[Howto:Creating custom Certificates using a Windows Certificate Authority]]&lt;br /&gt;
* [[Howto:Effect arbitrary Configuration Changes using a HTTP Command Line Client or from an Update]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Sample|{{PAGENAME}}]]&lt;/div&gt;</summary>
		<author><name>Nfi</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Howto14r2:Step-by-Step_Distribute_a_custom_device_certificate&amp;diff=79372</id>
		<title>Howto14r2:Step-by-Step Distribute a custom device certificate</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Howto14r2:Step-by-Step_Distribute_a_custom_device_certificate&amp;diff=79372"/>
		<updated>2026-04-01T12:22:45Z</updated>

		<summary type="html">&lt;p&gt;Nfi: /* Get VARS */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- Keywords: certificate, device certificate, devices, expert, step-by-step, easy--&amp;gt;&lt;br /&gt;
[[Category:Step-by-Step|Distribute a custom device certificate]]&lt;br /&gt;
&lt;br /&gt;
{{HOWTOMOD13r3 Translation Info}}&lt;br /&gt;
&lt;br /&gt;
This article describes a method to roll out a custom certificate to innovaphone devices. &lt;br /&gt;
&lt;br /&gt;
[[image:device-certificate-overview.png]]&lt;br /&gt;
&lt;br /&gt;
== Purpose ==&lt;br /&gt;
Some customers run their own public key infrastructure (PKI) and want to use their own certificate (eg a wildcard certificate like *.company.com). This way you can distribute this certificate to all innovaphone devices.&lt;br /&gt;
&lt;br /&gt;
=== Features ===&lt;br /&gt;
* A convenient way to distribute a custom device certificate&lt;br /&gt;
* Reboot is not necessary&lt;br /&gt;
&lt;br /&gt;
=== Limitations ===&lt;br /&gt;
* The length of the public key should not exceed 2048 bits. This is to limit the CPU consumption on our devices, see [[:Reference11r1:Certificate_management|Certificate management]] for details.&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
* Devices App &lt;br /&gt;
* Innovaphone PBX&lt;br /&gt;
* Firmware should be at least v14r2sr4&lt;br /&gt;
* You need a complete certificate chain containing the private key. We recommend to use a PEM encoded Text file [[:Reference11r1:Certificate_management#Uploading_a_certificate_chain_together_with_the_private_key|as explained here.]]&lt;br /&gt;
* Wireshark&lt;br /&gt;
&lt;br /&gt;
== Things to know before you begin ==&lt;br /&gt;
* The certificate device configuration in your Devices app only maintains your trust list. As a result it will not distribute the device certificate.&lt;br /&gt;
* The pre-installed certificate signed by the Inno-CA remains in the Flash when you upload a new certificate. If you delete the new certificate, the pre-installed certificate will reappear.&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
=== Create Expert configuration ===&lt;br /&gt;
* Open your &#039;&#039;Devices&#039;&#039; App-&amp;gt;&#039;&#039;&amp;lt;your Domain&amp;gt;&#039;&#039;-&#039;&#039;&amp;gt;Device Configuration&#039;&#039;-&#039;&#039;&amp;gt;Define device configuration&#039;&#039;-&amp;gt;&#039;&#039;Expert&#039;&#039;&lt;br /&gt;
* Assign a &#039;&#039;Description&#039;&#039; e.g Device certificate&lt;br /&gt;
* Assign the provisioning category to this device configuration that should receive the new device certificate&lt;br /&gt;
&lt;br /&gt;
[[image:device-certificate-1.png]] &lt;br /&gt;
=== Get VARS ===&lt;br /&gt;
* Open your Wireshark&lt;br /&gt;
* Drag and drop the PEM file into your Wireshark&lt;br /&gt;
* Your Wireshark will only display a few packets&lt;br /&gt;
&lt;br /&gt;
[[image:device-certificate-2.png]] &lt;br /&gt;
* Click on the first packet&lt;br /&gt;
* Do a right click on the section starting with Certificate&lt;br /&gt;
* Select Copy and then Copy as Hex stream&lt;br /&gt;
* Create a first line in your Expert configuration starting with &#039;&#039;vars create X509/CERTIFICATE/00000 pbln&#039;&#039; and paste the Hex stream from wireshark to the end of the line&lt;br /&gt;
&lt;br /&gt;
[[image:device-certificate-3.png]]&lt;br /&gt;
&lt;br /&gt;
* Then repeat the same procedure for each certificate in the certificate chain, but increase the index by 1. e.g. &#039;&#039;vars create X509/CERTIFICATE/00001&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
[[image:device-certificate-4.png]]&lt;br /&gt;
&lt;br /&gt;
The private key has to be copied as well.&lt;br /&gt;
* Open the last packet in Wireshark and select the BER section. Copy the section as Hex stream as well.&lt;br /&gt;
* Create a line &#039;&#039;vars create X509/KEY pbxln&#039;&#039; and  paste the Hex stream from the BER packet to the end of the line.&lt;br /&gt;
&lt;br /&gt;
[[image:device-certificate-5.png]]&lt;br /&gt;
&lt;br /&gt;
If no &#039;&#039;&#039;BER&#039;&#039;&#039; section is available, open the &#039;&#039;&#039;PRIVATE KEY&#039;&#039;&#039; packet instead. &amp;lt;/br&amp;gt;&lt;br /&gt;
Expand the &#039;&#039;&#039;PrivateKeyInfo&#039;&#039;&#039; structure and locate the entry &#039;&#039;&#039;privateKey&#039;&#039;&#039;. &amp;lt;/br&amp;gt;&lt;br /&gt;
Copy this section as a &#039;&#039;&#039;Hex stream&#039;&#039;&#039; as well, and use it in the same way as described above.&lt;br /&gt;
&lt;br /&gt;
=== Finish Expert configuration ===&lt;br /&gt;
* The last line in our script is: &#039;&#039;mod cmd X509 /servercert-update&#039;&#039;&lt;br /&gt;
* In the end the expert configuration should look like this:&lt;br /&gt;
&lt;br /&gt;
[[image:device-certificate-6.png]]&lt;br /&gt;
&lt;br /&gt;
*As soon as you save the configuration, the device certificate will be pushed.&lt;br /&gt;
&lt;br /&gt;
== Verification ==&lt;br /&gt;
Look at the Advanced UI of the device. You should see a new Device certificate on General/Certificates&lt;br /&gt;
== Known issues ==&lt;br /&gt;
===High CPU load ===&lt;br /&gt;
We only recommend to use a certificate that uses 2048 bit public key length.  &lt;br /&gt;
&lt;br /&gt;
== Related Articles ==&lt;br /&gt;
*[[Courseware:IT_Advanced_-_09_Custom_certificates]]&lt;br /&gt;
*[[Reference11r1:Certificate_management]]&lt;/div&gt;</summary>
		<author><name>Nfi</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Reference16r1:Concept_App_Service_IP&amp;diff=79361</id>
		<title>Reference16r1:Concept App Service IP</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Reference16r1:Concept_App_Service_IP&amp;diff=79361"/>
		<updated>2026-04-01T07:21:49Z</updated>

		<summary type="html">&lt;p&gt;Nfi: /* Create instance */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Concept|Apps]]&lt;br /&gt;
[[Category:Concept|IP]]&lt;br /&gt;
&lt;br /&gt;
The App IP is an app which offers the PBX functionality and further functionalities as App service on our innovaphone App Platform.&lt;br /&gt;
&lt;br /&gt;
== Applies To == &lt;br /&gt;
&lt;br /&gt;
* innovaphone firmware and apps V16&lt;br /&gt;
&lt;br /&gt;
==Requirements==&lt;br /&gt;
* innovaphone Application Platform (image version 140011 or higher)&lt;br /&gt;
&lt;br /&gt;
==Concept==&lt;br /&gt;
&lt;br /&gt;
The App IP offers modules known from innovaphone gateways, like the PBX, TURN server functionality etc.&lt;br /&gt;
&lt;br /&gt;
==How it works==&lt;br /&gt;
&lt;br /&gt;
=== Single instance mode ===&lt;br /&gt;
Unlike other App Services, the App IP is a single instance App Service, so you can create &#039;&#039;&#039;just&#039;&#039;&#039; a single instance and not multiple instances.&lt;br /&gt;
&lt;br /&gt;
== Licensing ==&lt;br /&gt;
Standard licensing mechanisms apply to the App IP as they apply to innovaphone gateways.&lt;br /&gt;
&lt;br /&gt;
In addition, every port license requires a dedicated IPAP license (similar to the IPVA license for virtual machines).&lt;br /&gt;
&lt;br /&gt;
== Apps ==&lt;br /&gt;
&lt;br /&gt;
There is no App provided by this App Service.&lt;br /&gt;
&lt;br /&gt;
== PBX Manager Plugins ==&lt;br /&gt;
&lt;br /&gt;
There is no PBX Manager Plugin provided by this App Service.&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
The configuration is done as an innovaphone gateway is configured too.&lt;br /&gt;
&lt;br /&gt;
=== Create instance ===&lt;br /&gt;
You have to create one instance for the App IP Service.&lt;br /&gt;
&lt;br /&gt;
[[Courseware:IT Advanced - 04 Setting up the Application Platform#Adding an App Service instance|Here]] are more informations how to do this.&lt;br /&gt;
&lt;br /&gt;
We recommend the following settings:&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Name&#039;&#039;&#039; = ip&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Domain&#039;&#039;&#039; = customer domain (system name of the PBX)&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Password&#039;&#039;&#039; = The password must be set to &amp;quot;pwd&amp;quot; for Install and will be changed during the process.&lt;br /&gt;
&lt;br /&gt;
=== Install Process ===&lt;br /&gt;
Install can be started under the webserver path of the App IP instance and /&#039;&#039;install.htm&#039;&#039;, e.g.: https://domain.com/ip/install.htm&lt;br /&gt;
&lt;br /&gt;
⚠️ Use standard ports for installation. If necessary, install via a reverse proxy&lt;br /&gt;
&lt;br /&gt;
⚠️ Do not use the localhost (127.0.0.1) address&lt;br /&gt;
&lt;br /&gt;
=== Advanced UI ===&lt;br /&gt;
The advanced UI is reachable under the webserver path of the App IP instance and /admin.xml?xsl=admin.xsl, e.g.:&lt;br /&gt;
https://domain.com/ip/admin.xml?xsl=admin.xsl&lt;br /&gt;
&lt;br /&gt;
=== IP configuration ===&lt;br /&gt;
As the App IP is just an App on an App Platform, there are no IP4/IP6, NTP etc. settings as on other innovaphone devices.&lt;br /&gt;
&lt;br /&gt;
==== Devices App ====&lt;br /&gt;
If your App Platform which runs the App IP is connected to a Devices App, you can access the Advanced UI with the &#039;&#039;&#039;PBX&#039;&#039;&#039; tab of your App Platform device.&lt;br /&gt;
&lt;br /&gt;
==Troubleshooting==&lt;br /&gt;
&lt;br /&gt;
The App IP offers standard tracing mechanism for App Services and in addition mechanisms known from innovaphone gateways.&amp;lt;br/&amp;gt;&lt;br /&gt;
You can enable module related trace flags with config change commands or by setting trace flags under Maintenance -&amp;gt; Tracing in the Advanced UI of the App IP.&lt;br /&gt;
&lt;br /&gt;
 Trace files are not found under Maintenance -&amp;gt; Tracing but on the App IP service on your App Platform Manager.&lt;br /&gt;
&lt;br /&gt;
==Known issues==&lt;br /&gt;
&lt;br /&gt;
==Related Articles==&lt;br /&gt;
* [[Reference16r1:Concept_innovaphone_App_Platform_Docker_Container]]&lt;/div&gt;</summary>
		<author><name>Nfi</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Howto16r1:Firmware_Upgrade_V15r1_V16r1&amp;diff=79359</id>
		<title>Howto16r1:Firmware Upgrade V15r1 V16r1</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Howto16r1:Firmware_Upgrade_V15r1_V16r1&amp;diff=79359"/>
		<updated>2026-03-31T14:40:03Z</updated>

		<summary type="html">&lt;p&gt;Nfi: /* New Apps */&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 16r1 capable innovaphone devices&lt;br /&gt;
: For a general overview of the upgrade process and a list of supported devices with 16r1, see [[Howto:Firmware Upgrade]]&lt;br /&gt;
== Licenses ==&lt;br /&gt;
In case of cloud or rental model, don&#039;t worry about licenses.&lt;br /&gt;
&lt;br /&gt;
If the system is licensed on premise, you&#039;ll need to regenerate the license file for v16 in https://portal.innovaphone.com/ and load into the system before upgrade (The system needs to have the SSC up to date).&lt;br /&gt;
&lt;br /&gt;
== Migration Policy ==&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red; font-weight: bold&amp;quot;&amp;gt;Before you begin, be sure that your whole installation is running the latest 15r1 service release.&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== TechAssist Upgrade Helper ===&lt;br /&gt;
* Before you start, make sure that all TechAssist tests (you will receive the required tests in the last update in the previous major version) labelled &amp;lt;code&amp;gt;Pre Upgrade: xy&amp;lt;/code&amp;gt; are positive, if available&lt;br /&gt;
* When you are finished, make sure that all TechAssist tests (you will receive new tests with the upgrade) are positive&lt;br /&gt;
&lt;br /&gt;
=== New TLS Profile ===&lt;br /&gt;
Please note that we have changed our TLS profiles ([[Reference16r1:IP4/General/TLS]]). The new &#039;&#039;Normal&#039;&#039; setting, which is the default value, now only allows TLS 1.3 and TLS 1.2.&lt;br /&gt;
&lt;br /&gt;
== Changes visible to the end customers ==&lt;br /&gt;
Listed here are changes that should be communicated by resellers to end users prior to a upgrade, as the change will be visible/audible in the behaviour of the application/device.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;Nothing&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Manual steps needed after upgrade ==&lt;br /&gt;
If the installer is not used for a new installation, some new default settings are not set. Please evaluate per app whether you want to configure the new default settings manually.&lt;br /&gt;
&lt;br /&gt;
=== Connector for Microsoft 365 ===&lt;br /&gt;
If you plan to use the new &#039;&#039;&#039;Contact Search&#039;&#039;&#039; feature of the Connector for Microsoft 365, you need to perform two manual Steps:&lt;br /&gt;
# Create the &#039;&#039;&#039;microsoft365-api&#039;&#039;&#039; app object by using the Settings template&lt;br /&gt;
# Assign the &#039;&#039;&#039;microsoft365-api&#039;&#039;&#039; app object to every user who should be able to use the new Contact Search feature. (Of cause, you can use a template for that)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
For a more detailed guide, please refer to the how-to article: [[Howto16r1:Configure Contact Search by Connector for Microsoft365#Creating the PBX app object using the PBX Manager Plugin]]&lt;br /&gt;
&lt;br /&gt;
=== Remote Control ===&lt;br /&gt;
In order to use the Admin Configuration Panel of the Settings App – AP Remote Control, it is necessary to grant access to the &#039;&#039;&#039;admin&#039;&#039;&#039; API, available in the App tab of the Remote Control App object.&lt;br /&gt;
&lt;br /&gt;
=== Working ===&lt;br /&gt;
For badge counts to work, the Working Manager app object must have &#039;&#039;&#039;Websocket&#039;&#039;&#039; and &#039;&#039;&#039;PbxSignal&#039;&#039;&#039; enabled.&lt;br /&gt;
For the Connect integration of the Working app, &#039;&#039;&#039;Websocket&#039;&#039;&#039;, &#039;&#039;&#039;Services&#039;&#039;&#039; and &#039;&#039;&#039;Connect&#039;&#039;&#039;(in the Apps tab) must be enabled in the Working User app.&lt;br /&gt;
&lt;br /&gt;
== New Apps ==&lt;br /&gt;
New Apps will not be installed automatically by the upgrade. The installation description of new apps is usually in the concept article. Please rate per app whether you want to install/use the new app and configure it manually.&lt;br /&gt;
&lt;br /&gt;
* App Polls: [[Reference16r1:Concept App Polls]]&lt;br /&gt;
* App Service Conference Transcriptions [[Reference16r1:Concept_App_Service_myApps_Assistant]]&lt;br /&gt;
* App Service Connector for Whatsapp: [[Reference16r1:Concept_App_Service_Connector_for_Whatsapp]]&lt;br /&gt;
* App Conference Scaler: [[Reference16r1:Concept_Conference_Scaler_App]]&lt;br /&gt;
* App Service IP: [[Reference16r1:Concept App Service IP]]&lt;br /&gt;
&lt;br /&gt;
== Removed ==&lt;br /&gt;
The following software is no longer included.&lt;br /&gt;
&lt;br /&gt;
* IP110A (can still be used with 15r1 firmware on current PBX versions)&lt;br /&gt;
* IP240A (can still be used with 15r1 firmware on current PBX versions)&lt;br /&gt;
* CA on CF card feature&lt;br /&gt;
&lt;br /&gt;
== Deprecated ==&lt;br /&gt;
The following software is based on legacy technology, with no further development and limited maintenance and support.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;Nothing&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Previously deprecated and now no longer supported == &lt;br /&gt;
The following software is based on legacy technology, with no further development and no more maintenance and support.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;Nothing&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Known Problems==&lt;br /&gt;
===Long Update-duration===&lt;br /&gt;
When you update, it can be up to 10 minutes before you have access to your app platform again.&lt;br /&gt;
&lt;br /&gt;
== Related Articles ==&lt;br /&gt;
*[[Howto:Firmware_Upgrade]]&lt;br /&gt;
* [[Howto15r1:Firmware_Upgrade_V14r2_V15r1]]&lt;br /&gt;
[[Category:Howto|{{PAGENAME}}]]&lt;/div&gt;</summary>
		<author><name>Nfi</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Reference16r1:Concept_App_Service_IP&amp;diff=79282</id>
		<title>Reference16r1:Concept App Service IP</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Reference16r1:Concept_App_Service_IP&amp;diff=79282"/>
		<updated>2026-03-27T19:47:13Z</updated>

		<summary type="html">&lt;p&gt;Nfi: /* Install Process */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Concept|Apps]]&lt;br /&gt;
[[Category:Concept|IP]]&lt;br /&gt;
&lt;br /&gt;
The App IP is an app which offers the PBX functionality and further functionalities as App service on our innovaphone App Platform.&lt;br /&gt;
&lt;br /&gt;
== Applies To == &lt;br /&gt;
&lt;br /&gt;
* innovaphone firmware and apps V16&lt;br /&gt;
&lt;br /&gt;
==Requirements==&lt;br /&gt;
* innovaphone Application Platform (image version 140011 or higher)&lt;br /&gt;
&lt;br /&gt;
==Concept==&lt;br /&gt;
&lt;br /&gt;
The App IP offers modules known from innovaphone gateways, like the PBX, TURN server functionality etc.&lt;br /&gt;
&lt;br /&gt;
==How it works==&lt;br /&gt;
&lt;br /&gt;
=== Single instance mode ===&lt;br /&gt;
Unlike other App Services, the App IP is a single instance App Service, so you can create &#039;&#039;&#039;just&#039;&#039;&#039; a single instance and not multiple instances.&lt;br /&gt;
&lt;br /&gt;
== Licensing ==&lt;br /&gt;
Standard licensing mechanisms apply to the App IP as they apply to innovaphone gateways.&lt;br /&gt;
&lt;br /&gt;
In addition, every port license requires a dedicated IPAP license (similar to the IPVA license for virtual machines).&lt;br /&gt;
&lt;br /&gt;
== Apps ==&lt;br /&gt;
&lt;br /&gt;
There is no App provided by this App Service.&lt;br /&gt;
&lt;br /&gt;
== PBX Manager Plugins ==&lt;br /&gt;
&lt;br /&gt;
There is no PBX Manager Plugin provided by this App Service.&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
The configuration is done as an innovaphone gateway is configured too.&lt;br /&gt;
&lt;br /&gt;
=== Create instance ===&lt;br /&gt;
You have to create one instance for the App IP Service.&lt;br /&gt;
&lt;br /&gt;
[[Courseware:IT Advanced - 04 Setting up the Application Platform#Adding an App Service instance|Here]] are more informations how to do this.&lt;br /&gt;
&lt;br /&gt;
We recommend the following settings:&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Name&#039;&#039;&#039; = ip&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Domain&#039;&#039;&#039; = customer domain (system name of the PBX)&lt;br /&gt;
&lt;br /&gt;
=== Install Process ===&lt;br /&gt;
Install can be started under the webserver path of the App IP instance and /&#039;&#039;install.htm&#039;&#039;, e.g.: https://domain.com/ip/install.htm&lt;br /&gt;
&lt;br /&gt;
⚠️ Use standard ports for installation. If necessary, install via a reverse proxy&lt;br /&gt;
&lt;br /&gt;
⚠️ Do not use the localhost (127.0.0.1) address&lt;br /&gt;
&lt;br /&gt;
=== Advanced UI ===&lt;br /&gt;
The advanced UI is reachable under the webserver path of the App IP instance and /admin.xml?xsl=admin.xsl, e.g.:&lt;br /&gt;
https://domain.com/ip/admin.xml?xsl=admin.xsl&lt;br /&gt;
&lt;br /&gt;
=== IP configuration ===&lt;br /&gt;
As the App IP is just an App on an App Platform, there are no IP4/IP6, NTP etc. settings as on other innovaphone devices.&lt;br /&gt;
&lt;br /&gt;
==== Devices App ====&lt;br /&gt;
If your App Platform which runs the App IP is connected to a Devices App, you can access the Advanced UI with the &#039;&#039;&#039;PBX&#039;&#039;&#039; tab of your App Platform device.&lt;br /&gt;
&lt;br /&gt;
==Troubleshooting==&lt;br /&gt;
&lt;br /&gt;
The App IP offers standard tracing mechanism for App Services and in addition mechanisms known from innovaphone gateways.&amp;lt;br/&amp;gt;&lt;br /&gt;
You can enable module related trace flags with config change commands or by setting trace flags under Maintenance -&amp;gt; Tracing in the Advanced UI of the App IP.&lt;br /&gt;
&lt;br /&gt;
 Trace files are not found under Maintenance -&amp;gt; Tracing but on the App IP service on your App Platform Manager.&lt;br /&gt;
&lt;br /&gt;
==Known issues==&lt;br /&gt;
&lt;br /&gt;
==Related Articles==&lt;br /&gt;
* [[Reference16r1:Concept_innovaphone_App_Platform_Docker_Container]]&lt;/div&gt;</summary>
		<author><name>Nfi</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Reference16r1:Concept_innovaphone_App_Platform_Container&amp;diff=79275</id>
		<title>Reference16r1:Concept innovaphone App Platform Container</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Reference16r1:Concept_innovaphone_App_Platform_Container&amp;diff=79275"/>
		<updated>2026-03-27T13:40:28Z</updated>

		<summary type="html">&lt;p&gt;Nfi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The innovaphone App Platform Container provides a myApps App Platform instance that includes the AP Manager, Webserver and PostgreSQL. This container offers a ready-to-use environment for myApps applications and the innovaphone PBX.&lt;br /&gt;
&lt;br /&gt;
== Applies To == &lt;br /&gt;
&lt;br /&gt;
* innovaphone App Platform Container&lt;br /&gt;
&lt;br /&gt;
==Requirements==&lt;br /&gt;
* Host with docker on a x86_64 (amd64) platform&lt;br /&gt;
* innovaphone App Platform Container&lt;br /&gt;
&lt;br /&gt;
==Concept==&lt;br /&gt;
&lt;br /&gt;
The innovaphone App Platform Container provides the innovaphone App Platform for container environments (Open Container Initiative (OCI) format). &lt;br /&gt;
&lt;br /&gt;
* The App Platform Manager and Webserver Apps are already integrated in the container and provide the already known functionality.&lt;br /&gt;
* Apps are installed, updated and managed as usual.&lt;br /&gt;
* The mount point will be used for the database, the App binaries and log files.&lt;br /&gt;
&lt;br /&gt;
==Image Information==&lt;br /&gt;
&lt;br /&gt;
This chapter provides details about the Docker image used for the innovaphone App Platform.&lt;br /&gt;
&lt;br /&gt;
===Repository Details===&lt;br /&gt;
&lt;br /&gt;
;Repository Host : registry.innovaphone.com&lt;br /&gt;
;Image Name : cloud/kubernetes/innovaphone-platform-instance&lt;br /&gt;
&lt;br /&gt;
 registry.innovaphone.com/cloud/kubernetes/innovaphone-platform-instance:latest&lt;br /&gt;
&lt;br /&gt;
===Tagging and Versioning===&lt;br /&gt;
The image is usually tagged with the build number according to innovaphone software releases:&lt;br /&gt;
&lt;br /&gt;
;Latest Tag : Use the latest tag for pulling the most recent service release.&lt;br /&gt;
&lt;br /&gt;
;Release Build Number : For production or version-specific deployments, use a specific build number as the tag (e.g., 130006).&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
 docker pull registry.innovaphone.com/cloud/kubernetes/innovaphone-platform-instance:130006&lt;br /&gt;
&lt;br /&gt;
===Supported Architecture===&lt;br /&gt;
This Docker image supports the &amp;lt;code&amp;gt;linux/amd64&amp;lt;/code&amp;gt; architecture.&lt;br /&gt;
&lt;br /&gt;
===Image Reference===&lt;br /&gt;
An example of a full image reference using a specific release build number would be:&lt;br /&gt;
 registry.innovaphone.com/cloud/kubernetes/innovaphone-platform-instance:130006&lt;br /&gt;
&lt;br /&gt;
==Ports==&lt;br /&gt;
This chapter outlines the various ports exposed by the container. The webserver ports are available immediately upon container startup, after start of the AP Manager and the Webserver, while the additional application ports become active after the app installation. In most cases, a one-to-one mapping is used, meaning the container port is mapped directly to the same host port unless otherwise specified.&lt;br /&gt;
&lt;br /&gt;
===Ports &amp;lt; 1024===&lt;br /&gt;
On most docker hosts, a container won&#039;t be able to use ports below 1024, unless the container is started with higher privileges. &lt;br /&gt;
This shouldn&#039;t be neccessary anyways as all ports can be configured to higher ports.&lt;br /&gt;
&lt;br /&gt;
===Webserver Ports===&lt;br /&gt;
;HTTP:&lt;br /&gt;
Container Port: 8080&lt;br /&gt;
Description: Used for accessing the built-in webserver immediately upon container startup.&lt;br /&gt;
&lt;br /&gt;
;HTTPS:&lt;br /&gt;
Container Port: 8082&lt;br /&gt;
Description: Used for accessing the built-in webserver immediately upon container startup.&lt;br /&gt;
&lt;br /&gt;
=== Additional Application Ports===&lt;br /&gt;
Following additional container ports are avilable depending on installed and configured applications:&lt;br /&gt;
;H323/TLS : 1300&lt;br /&gt;
;SIP : 5060&lt;br /&gt;
;SIPS : 5061&lt;br /&gt;
;LDAPS : 1636&lt;br /&gt;
;SMTP : 8025&lt;br /&gt;
;SMTPS : 8587&lt;br /&gt;
;STUN/TURN : 3478 UDP/TCP&lt;br /&gt;
&#039;&#039;&#039;Additional hint for Portmapping&#039;&#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
docker run -d \&lt;br /&gt;
  --name=innovaphone \&lt;br /&gt;
  --restart unless-stopped \&lt;br /&gt;
  -p 9090:8080 \        #Container Host Port (external) 9090:8080 Container Port&lt;br /&gt;
  -p 9091:8082 \&lt;br /&gt;
  -p 5060:5060 \&lt;br /&gt;
  -p 5061:5061 \&lt;br /&gt;
  -p 1300:1300 \&lt;br /&gt;
  -p 1636:1636 \&lt;br /&gt;
  -p 8025:8025 \&lt;br /&gt;
  -p 8587:8587 \&lt;br /&gt;
  -p 3478:3478 \&lt;br /&gt;
  -p 3478:3478/udp \&lt;br /&gt;
  -v /path/of/data/innovaphone:/mnt/data \      #in this path you will find Apps, DBs &amp;amp; Logs&lt;br /&gt;
                                                #this path musst be used for backups!!&lt;br /&gt;
  -e WEBSERVERPORTHTTP=8080 \&lt;br /&gt;
  -e WEBSERVERPORTHTTPS=8082 \&lt;br /&gt;
  -e LOG_FLAGS=7 \&lt;br /&gt;
  -e LOG_SIZE=1048576 \&lt;br /&gt;
  -e DNSIPV4=8.8.8.8 \&lt;br /&gt;
  -e LIMIT_RAM=512 \        #Ram limit in MB&lt;br /&gt;
  -e LIMIT_DISK=10 \        #disk size in GB&lt;br /&gt;
  -e TZ=Europe/Berlin \&lt;br /&gt;
  registry.innovaphone.com/cloud/kubernetes/innovaphone-platform-instance:latest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Environment Variables (ENVs)==&lt;br /&gt;
This chapter outlines the key environment variables used to configure the behavior of the innovaphone App Platform Container. These variables allow you to customize logging, port settings, resource limits, and more during startup and runtime.&lt;br /&gt;
&lt;br /&gt;
;LOG_FLAGS : Defines the integer representation for the trace flags of the AP Manager, according flags activated under the AP Manager / Diagnostics. See browser console message on Save button press (e.g. &amp;quot;logFlags&amp;quot;:1 , if the &amp;quot;App&amp;quot; flag is activated).&lt;br /&gt;
 LOG_FLAGS=7&lt;br /&gt;
;LOG_SIZE : Specifies the maximum size in bytes for logs before rotation or management actions occur. Default: 5242880.&lt;br /&gt;
 LOG_SIZE=1048576&lt;br /&gt;
;WEBSERVERPORTHTTP : Sets the in-container HTTP port for the webserver. Default: 8080.&lt;br /&gt;
 WEBSERVERPORTHTTP=8080&lt;br /&gt;
;WEBSERVERPORTHTTPS : Sets the in-container HTTPS port for the webserver. Default: 8082.&lt;br /&gt;
 WEBSERVERPORTHTTPS=8443&lt;br /&gt;
;DNSIPV4 : Specifies the in-container DNS server IPv4 address for DNS resolution. Overrides the default container runtime DNS server.&lt;br /&gt;
 DNSIPV4=8.8.8.8&lt;br /&gt;
;DNS_DOMAIN : The FQDN of the App Platform that can be used to access the app services. This optional parameter is used as a static DNS entry added to /etc/hosts. The destination IP address is the resolved IP address behind INTERNAL_DNS_DOMAIN or NAMESPACE.&lt;br /&gt;
 DNS_DOMAIN=ap.example.com&lt;br /&gt;
;INTERNAL_DNS_DOMAIN : The internal FQDN of the App Platform. This FQDN is used to resolve the internal IP address of the App Platform, to be mapped from DNS_DOMAIN in /etc/hosts.&lt;br /&gt;
 INTERNAL_DNS_DOMAIN=my-apps-deployment.my-namespace.svc.cluster.local&lt;br /&gt;
;NAMESPACE : The Kubernetes namespace used to build internal FQDN of the App Platform. Used with DNS_DOMAIN to map it to the IP address of ap.my-namespace.svc.cluster.local.&lt;br /&gt;
 NAMESPACE=my-namespace&lt;br /&gt;
;LIMIT_RAM : Sets the RAM limit for the container, in MB, controlling how much memory it may consume. Used by AP Manager to stop the app instances on overconsumption.&lt;br /&gt;
 LIMIT_RAM=512&lt;br /&gt;
;LIMIT_DISK : Defines the disk space limit in GB for the container to manage storage consumption. Used by AP Manager to stop the app instances on overconsumption.&lt;br /&gt;
 LIMIT_DISK=10&lt;br /&gt;
&lt;br /&gt;
==File limits==&lt;br /&gt;
Containers may have a default file limit per process, e.g. 1024 files. Depending on your installation and usage, this value is too small and you need to allow more, e.g. handing this in the docker run command:&lt;br /&gt;
 --ulimit nofile=500000:500000&lt;br /&gt;
&lt;br /&gt;
==Volumes and Mounts==&lt;br /&gt;
This container uses a dedicated internal mount path for the persistent data management across container restarts and updates.&lt;br /&gt;
&lt;br /&gt;
===Internal Data Volume===&lt;br /&gt;
;Mount Path : &amp;lt;code&amp;gt;/mnt/data&amp;lt;/code&amp;gt;&lt;br /&gt;
;Contents:&lt;br /&gt;
*Apps: Installed application binaries.&lt;br /&gt;
*Databases: PostgreSQL files.&lt;br /&gt;
*Logging: Log files for system and application events.&lt;br /&gt;
&lt;br /&gt;
===Mounting===&lt;br /&gt;
To ensure that your data is preserved, map a host directory or Docker named volume to the container&#039;s /mnt/data path when running the container.&lt;br /&gt;
For example:&lt;br /&gt;
 docker run -d -v /path/on/host:/mnt/data registry.innovaphone.com/cloud/kubernetes/innovaphone-platform-instance:130006&lt;br /&gt;
&lt;br /&gt;
This setup guarantees that your apps, associated data, databases, and logs persist independently of the container lifecycle.&lt;br /&gt;
&lt;br /&gt;
==Entrypoint==&lt;br /&gt;
The container uses a fixed entrypoint:&lt;br /&gt;
 ENTRYPOINT [&amp;quot;/entrypoint.sh&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
This script prepares the container and starts the AP Manager executable.&lt;br /&gt;
&lt;br /&gt;
==Logging and Monitoring==&lt;br /&gt;
The log of the entrypoint.sh and of the AP manager is avilable as conatiner output. The installed applications store the ir log files under &amp;lt;code&amp;gt;/mnt/data/var/log/apps/&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Unexpected high system load ===&lt;br /&gt;
If you encounter a high load, you need to verify whether the load is actually coming from your container. Docker containers always display the load of the physical host system.&lt;br /&gt;
&lt;br /&gt;
It may be that the Docker host itself is also virtualized as an LXC container, and your Docker instances are running within it. In such a setup, the system load of the physical host is displayed because &amp;lt;code&amp;gt;/proc/loadavg&amp;lt;/code&amp;gt; is not isolated per logical layer.&lt;br /&gt;
&lt;br /&gt;
An increased load in the container therefore does not automatically mean that the container itself is the cause or that you have a problem at all. In short: To assess the load, you always need information (e.g., number of CPU cores or I/O information) from the physical host.&lt;br /&gt;
&lt;br /&gt;
==Usage Example==&lt;br /&gt;
 sudo docker run -d --ulimit nofile=500000:500000 --restart unless-stopped --name innovaphoneAP -p 9090:8080 -p 9091:8082 -e WEBSERVERPORTHTTP=8080 -e WEBSERVERPORTHTTPS=8082 -v $(pwd)/myapps/:/mnt/data registry.innovaphone.com/cloud/kubernetes/innovaphone-platform-instance:latest&lt;br /&gt;
&lt;br /&gt;
This command runs the container in detached mode with automatic restart. It names the container innovaphoneAP, maps host ports 9090 and 9091 to the container&#039;s HTTP and HTTPS ports, sets the webserver port environment variables, mounts a host directory to /mnt/data, and starts the AP Manager. After container start up the AP manager web UI is accessible via &amp;lt;code&amp;gt;http://localhost:9090&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;https://localhost:9091&amp;lt;/code&amp;gt;.&lt;/div&gt;</summary>
		<author><name>Nfi</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Datasheet_App_IP&amp;diff=79256</id>
		<title>Datasheet App IP</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Datasheet_App_IP&amp;diff=79256"/>
		<updated>2026-03-25T14:15:43Z</updated>

		<summary type="html">&lt;p&gt;Nfi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{datasheet_header|innovaphone App IP|Virtual communication platform}}&lt;br /&gt;
&amp;lt;div class=&amp;quot;datasheets-mehrspaltig&amp;quot;&amp;gt;&lt;br /&gt;
[[Image:appip.png]]&lt;br /&gt;
===Firmware===&lt;br /&gt;
* Appliance operated with firmware version 16r1 or higher&lt;br /&gt;
* Requires innovaphone myApps Application Platform version 140011 or higher&lt;br /&gt;
===Interfaces===&lt;br /&gt;
* Uses network connectivity of innovaphone myApps Application Platform&lt;br /&gt;
* optional ISDN-connectivity with ISDN-capable innovaphone gateway&lt;br /&gt;
===Hardware===&lt;br /&gt;
Hardware independent; operated on top of innovaphone Application Platform&lt;br /&gt;
&lt;br /&gt;
System requirements innovaphone Application Platform depend on used hardware&lt;br /&gt;
&lt;br /&gt;
Soft Conferencing (without DSP) for up to 100 voice / conference channels G.711a/u-law&lt;br /&gt;
&lt;br /&gt;
Channels for the innovaphone faxserver using T.38.&lt;br /&gt;
&lt;br /&gt;
===virtual innovaphone PBX===&lt;br /&gt;
Executed as application in innovaphone Application Platform&lt;br /&gt;
&lt;br /&gt;
===Use cases===&lt;br /&gt;
Hosting platform – several PBX using the same HW, customer separation&lt;br /&gt;
&lt;br /&gt;
Seamless scalable – ranges from entry level platform for SMEs to large enterprises&lt;br /&gt;
&lt;br /&gt;
Managed services&lt;br /&gt;
&lt;br /&gt;
===Voice Codecs===&lt;br /&gt;
G.711 A-law / µ-law&lt;br /&gt;
&lt;br /&gt;
{{Gateway_Firmware_Technische_Daten_EN|appip=false}}&lt;br /&gt;
&lt;br /&gt;
{{Template:Leistungsmerkmale EN - Lizenzen Gateways}}&lt;br /&gt;
&lt;br /&gt;
{{Template:CE-Decl_Gateways|Conformities|see separate information sheet}}&lt;br /&gt;
===Order Number IPAPP license (for each port license used): 02-00043-003===&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
{{Template:Datasheet_footer|EN}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Technical Data Gateways EN|{{PAGENAME}}]]&lt;/div&gt;</summary>
		<author><name>Nfi</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Datasheet_App_IP&amp;diff=79255</id>
		<title>Datasheet App IP</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Datasheet_App_IP&amp;diff=79255"/>
		<updated>2026-03-25T14:14:54Z</updated>

		<summary type="html">&lt;p&gt;Nfi: /* Order Number IPAP license (for each port license used): 02-00043-003 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{datasheet_header|innovaphone APPIP|Virtual communication platform}}&lt;br /&gt;
&amp;lt;div class=&amp;quot;datasheets-mehrspaltig&amp;quot;&amp;gt;&lt;br /&gt;
[[Image:appip.png]]&lt;br /&gt;
===Firmware===&lt;br /&gt;
* Appliance operated with firmware version 16r1 or higher&lt;br /&gt;
* Requires innovaphone myApps Application Platform version 140011 or higher&lt;br /&gt;
===Interfaces===&lt;br /&gt;
* Uses network connectivity of innovaphone myApps Application Platform&lt;br /&gt;
* optional ISDN-connectivity with ISDN-capable innovaphone gateway&lt;br /&gt;
===Hardware===&lt;br /&gt;
Hardware independent; operated on top of innovaphone Application Platform&lt;br /&gt;
&lt;br /&gt;
System requirements innovaphone Application Platform depend on used hardware&lt;br /&gt;
&lt;br /&gt;
Soft Conferencing (without DSP) for up to 100 voice / conference channels G.711a/u-law&lt;br /&gt;
&lt;br /&gt;
Channels for the innovaphone faxserver using T.38.&lt;br /&gt;
&lt;br /&gt;
===virtual innovaphone PBX===&lt;br /&gt;
Executed as application in innovaphone Application Platform&lt;br /&gt;
&lt;br /&gt;
===Use cases===&lt;br /&gt;
Hosting platform – several PBX using the same HW, customer separation&lt;br /&gt;
&lt;br /&gt;
Seamless scalable – ranges from entry level platform for SMEs to large enterprises&lt;br /&gt;
&lt;br /&gt;
Managed services&lt;br /&gt;
&lt;br /&gt;
===Voice Codecs===&lt;br /&gt;
G.711 A-law / µ-law&lt;br /&gt;
&lt;br /&gt;
{{Gateway_Firmware_Technische_Daten_EN|appip=false}}&lt;br /&gt;
&lt;br /&gt;
{{Template:Leistungsmerkmale EN - Lizenzen Gateways}}&lt;br /&gt;
&lt;br /&gt;
{{Template:CE-Decl_Gateways|Conformities|see separate information sheet}}&lt;br /&gt;
===Order Number IPAPP license (for each port license used): 02-00043-003===&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
{{Template:Datasheet_footer|EN}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Technical Data Gateways EN|{{PAGENAME}}]]&lt;/div&gt;</summary>
		<author><name>Nfi</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Reference16r1:Concept_innovaphone_App_Platform_Container&amp;diff=79253</id>
		<title>Reference16r1:Concept innovaphone App Platform Container</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Reference16r1:Concept_innovaphone_App_Platform_Container&amp;diff=79253"/>
		<updated>2026-03-25T14:00:09Z</updated>

		<summary type="html">&lt;p&gt;Nfi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{FIXME|reason=Below described feature is experimental and not officially supported for use in productive environments.}}&lt;br /&gt;
The innovaphone App Platform Container provides a myApps App Platform instance that includes the AP Manager, Webserver and PostgreSQL. This container offers a ready-to-use environment for myApps applications and the innovaphone PBX.&lt;br /&gt;
&lt;br /&gt;
== Applies To == &lt;br /&gt;
&lt;br /&gt;
* innovaphone App Platform Container&lt;br /&gt;
&lt;br /&gt;
==Requirements==&lt;br /&gt;
* Host with docker on a x86_64 (amd64) platform&lt;br /&gt;
* innovaphone App Platform Container&lt;br /&gt;
&lt;br /&gt;
==Concept==&lt;br /&gt;
&lt;br /&gt;
The innovaphone App Platform Container provides the innovaphone App Platform for container environments (Open Container Initiative (OCI) format). &lt;br /&gt;
&lt;br /&gt;
* The App Platform Manager and Webserver Apps are already integrated in the container and provide the already known functionality.&lt;br /&gt;
* Apps are installed, updated and managed as usual.&lt;br /&gt;
* The mount point will be used for the database, the App binaries and log files.&lt;br /&gt;
&lt;br /&gt;
==Image Information==&lt;br /&gt;
&lt;br /&gt;
This chapter provides details about the Docker image used for the innovaphone App Platform.&lt;br /&gt;
&lt;br /&gt;
===Repository Details===&lt;br /&gt;
&lt;br /&gt;
;Repository Host : registry.innovaphone.com&lt;br /&gt;
;Image Name : cloud/kubernetes/innovaphone-platform-instance&lt;br /&gt;
&lt;br /&gt;
 registry.innovaphone.com/cloud/kubernetes/innovaphone-platform-instance:latest&lt;br /&gt;
&lt;br /&gt;
===Tagging and Versioning===&lt;br /&gt;
The image is usually tagged with the build number according to innovaphone software releases:&lt;br /&gt;
&lt;br /&gt;
;Latest Tag : Use the latest tag for pulling the most recent service release.&lt;br /&gt;
&lt;br /&gt;
;Release Build Number : For production or version-specific deployments, use a specific build number as the tag (e.g., 130006).&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
 docker pull registry.innovaphone.com/cloud/kubernetes/innovaphone-platform-instance:130006&lt;br /&gt;
&lt;br /&gt;
===Supported Architecture===&lt;br /&gt;
This Docker image supports the &amp;lt;code&amp;gt;linux/amd64&amp;lt;/code&amp;gt; architecture.&lt;br /&gt;
&lt;br /&gt;
===Image Reference===&lt;br /&gt;
An example of a full image reference using a specific release build number would be:&lt;br /&gt;
 registry.innovaphone.com/cloud/kubernetes/innovaphone-platform-instance:130006&lt;br /&gt;
&lt;br /&gt;
==Ports==&lt;br /&gt;
This chapter outlines the various ports exposed by the container. The webserver ports are available immediately upon container startup, after start of the AP Manager and the Webserver, while the additional application ports become active after the app installation. In most cases, a one-to-one mapping is used, meaning the container port is mapped directly to the same host port unless otherwise specified.&lt;br /&gt;
&lt;br /&gt;
===Ports &amp;lt; 1024===&lt;br /&gt;
On most docker hosts, a container won&#039;t be able to use ports below 1024, unless the container is started with higher privileges. &lt;br /&gt;
This shouldn&#039;t be neccessary anyways as all ports can be configured to higher ports.&lt;br /&gt;
&lt;br /&gt;
===Webserver Ports===&lt;br /&gt;
;HTTP:&lt;br /&gt;
Container Port: 8080&lt;br /&gt;
Description: Used for accessing the built-in webserver immediately upon container startup.&lt;br /&gt;
&lt;br /&gt;
;HTTPS:&lt;br /&gt;
Container Port: 8082&lt;br /&gt;
Description: Used for accessing the built-in webserver immediately upon container startup.&lt;br /&gt;
&lt;br /&gt;
=== Additional Application Ports===&lt;br /&gt;
Following additional container ports are avilable depending on installed and configured applications:&lt;br /&gt;
;H323/TLS : 1300&lt;br /&gt;
;SIP : 5060&lt;br /&gt;
;SIPS : 5061&lt;br /&gt;
;LDAPS : 1636&lt;br /&gt;
;SMTP : 8025&lt;br /&gt;
;SMTPS : 8587&lt;br /&gt;
;STUN/TURN : 3478 UDP/TCP&lt;br /&gt;
&#039;&#039;&#039;Additional hint for Portmapping&#039;&#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
docker run -d \&lt;br /&gt;
  --name=innovaphone \&lt;br /&gt;
  --restart unless-stopped \&lt;br /&gt;
  -p 9090:8080 \        #Container Host Port (external) 9090:8080 Container Port&lt;br /&gt;
  -p 9091:8082 \&lt;br /&gt;
  -p 5060:5060 \&lt;br /&gt;
  -p 5061:5061 \&lt;br /&gt;
  -p 1300:1300 \&lt;br /&gt;
  -p 1636:1636 \&lt;br /&gt;
  -p 8025:8025 \&lt;br /&gt;
  -p 8587:8587 \&lt;br /&gt;
  -p 3478:3478 \&lt;br /&gt;
  -p 3478:3478/udp \&lt;br /&gt;
  -v /path/of/data/innovaphone:/mnt/data \      #in this path you will find Apps, DBs &amp;amp; Logs&lt;br /&gt;
                                                #this path musst be used for backups!!&lt;br /&gt;
  -e WEBSERVERPORTHTTP=8080 \&lt;br /&gt;
  -e WEBSERVERPORTHTTPS=8082 \&lt;br /&gt;
  -e LOG_FLAGS=7 \&lt;br /&gt;
  -e LOG_SIZE=1048576 \&lt;br /&gt;
  -e DNSIPV4=8.8.8.8 \&lt;br /&gt;
  -e LIMIT_RAM=512 \        #Ram limit in MB&lt;br /&gt;
  -e LIMIT_DISK=10 \        #disk size in GB&lt;br /&gt;
  -e TZ=Europe/Berlin \&lt;br /&gt;
  registry.innovaphone.com/cloud/kubernetes/innovaphone-platform-instance:latest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Environment Variables (ENVs)==&lt;br /&gt;
This chapter outlines the key environment variables used to configure the behavior of the innovaphone App Platform Container. These variables allow you to customize logging, port settings, resource limits, and more during startup and runtime.&lt;br /&gt;
&lt;br /&gt;
;LOG_FLAGS : Defines the integer representation for the trace flags of the AP Manager, according flags activated under the AP Manager / Diagnostics. See browser console message on Save button press (e.g. &amp;quot;logFlags&amp;quot;:1 , if the &amp;quot;App&amp;quot; flag is activated).&lt;br /&gt;
 LOG_FLAGS=7&lt;br /&gt;
;LOG_SIZE : Specifies the maximum size in bytes for logs before rotation or management actions occur. Default: 5242880.&lt;br /&gt;
 LOG_SIZE=1048576&lt;br /&gt;
;WEBSERVERPORTHTTP : Sets the in-container HTTP port for the webserver. Default: 8080.&lt;br /&gt;
 WEBSERVERPORTHTTP=8080&lt;br /&gt;
;WEBSERVERPORTHTTPS : Sets the in-container HTTPS port for the webserver. Default: 8082.&lt;br /&gt;
 WEBSERVERPORTHTTPS=8443&lt;br /&gt;
;DNSIPV4 : Specifies the in-container DNS server IPv4 address for DNS resolution. Overrides the default container runtime DNS server.&lt;br /&gt;
 DNSIPV4=8.8.8.8&lt;br /&gt;
;DNS_DOMAIN : The FQDN of the App Platform that can be used to access the app services. This optional parameter is used as a static DNS entry added to /etc/hosts. The destination IP address is the resolved IP address behind INTERNAL_DNS_DOMAIN or NAMESPACE.&lt;br /&gt;
 DNS_DOMAIN=ap.example.com&lt;br /&gt;
;INTERNAL_DNS_DOMAIN : The internal FQDN of the App Platform. This FQDN is used to resolve the internal IP address of the App Platform, to be mapped from DNS_DOMAIN in /etc/hosts.&lt;br /&gt;
 INTERNAL_DNS_DOMAIN=my-apps-deployment.my-namespace.svc.cluster.local&lt;br /&gt;
;NAMESPACE : The Kubernetes namespace used to build internal FQDN of the App Platform. Used with DNS_DOMAIN to map it to the IP address of ap.my-namespace.svc.cluster.local.&lt;br /&gt;
 NAMESPACE=my-namespace&lt;br /&gt;
;LIMIT_RAM : Sets the RAM limit for the container, in MB, controlling how much memory it may consume. Used by AP Manager to stop the app instances on overconsumption.&lt;br /&gt;
 LIMIT_RAM=512&lt;br /&gt;
;LIMIT_DISK : Defines the disk space limit in GB for the container to manage storage consumption. Used by AP Manager to stop the app instances on overconsumption.&lt;br /&gt;
 LIMIT_DISK=10&lt;br /&gt;
&lt;br /&gt;
==File limits==&lt;br /&gt;
Containers may have a default file limit per process, e.g. 1024 files. Depending on your installation and usage, this value is too small and you need to allow more, e.g. handing this in the docker run command:&lt;br /&gt;
 --ulimit nofile=500000:500000&lt;br /&gt;
&lt;br /&gt;
==Volumes and Mounts==&lt;br /&gt;
This container uses a dedicated internal mount path for the persistent data management across container restarts and updates.&lt;br /&gt;
&lt;br /&gt;
===Internal Data Volume===&lt;br /&gt;
;Mount Path : &amp;lt;code&amp;gt;/mnt/data&amp;lt;/code&amp;gt;&lt;br /&gt;
;Contents:&lt;br /&gt;
*Apps: Installed application binaries.&lt;br /&gt;
*Databases: PostgreSQL files.&lt;br /&gt;
*Logging: Log files for system and application events.&lt;br /&gt;
&lt;br /&gt;
===Mounting===&lt;br /&gt;
To ensure that your data is preserved, map a host directory or Docker named volume to the container&#039;s /mnt/data path when running the container.&lt;br /&gt;
For example:&lt;br /&gt;
 docker run -d -v /path/on/host:/mnt/data registry.innovaphone.com/cloud/kubernetes/innovaphone-platform-instance:130006&lt;br /&gt;
&lt;br /&gt;
This setup guarantees that your apps, associated data, databases, and logs persist independently of the container lifecycle.&lt;br /&gt;
&lt;br /&gt;
==Entrypoint==&lt;br /&gt;
The container uses a fixed entrypoint:&lt;br /&gt;
 ENTRYPOINT [&amp;quot;/entrypoint.sh&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
This script prepares the container and starts the AP Manager executable.&lt;br /&gt;
&lt;br /&gt;
==Logging and Monitoring==&lt;br /&gt;
The log of the entrypoint.sh and of the AP manager is avilable as conatiner output. The installed applications store the ir log files under &amp;lt;code&amp;gt;/mnt/data/var/log/apps/&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Unexpected high system load ===&lt;br /&gt;
If you encounter a high load, you need to verify whether the load is actually coming from your container. Docker containers always display the load of the physical host system.&lt;br /&gt;
&lt;br /&gt;
It may be that the Docker host itself is also virtualized as an LXC container, and your Docker instances are running within it. In such a setup, the system load of the physical host is displayed because &amp;lt;code&amp;gt;/proc/loadavg&amp;lt;/code&amp;gt; is not isolated per logical layer.&lt;br /&gt;
&lt;br /&gt;
An increased load in the container therefore does not automatically mean that the container itself is the cause or that you have a problem at all. In short: To assess the load, you always need information (e.g., number of CPU cores or I/O information) from the physical host.&lt;br /&gt;
&lt;br /&gt;
==Usage Example==&lt;br /&gt;
 sudo docker run -d --ulimit nofile=500000:500000 --restart unless-stopped --name innovaphoneAP -p 9090:8080 -p 9091:8082 -e WEBSERVERPORTHTTP=8080 -e WEBSERVERPORTHTTPS=8082 -v $(pwd)/myapps/:/mnt/data registry.innovaphone.com/cloud/kubernetes/innovaphone-platform-instance:latest&lt;br /&gt;
&lt;br /&gt;
This command runs the container in detached mode with automatic restart. It names the container innovaphoneAP, maps host ports 9090 and 9091 to the container&#039;s HTTP and HTTPS ports, sets the webserver port environment variables, mounts a host directory to /mnt/data, and starts the AP Manager. After container start up the AP manager web UI is accessible via &amp;lt;code&amp;gt;http://localhost:9090&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;https://localhost:9091&amp;lt;/code&amp;gt;.&lt;/div&gt;</summary>
		<author><name>Nfi</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Reference16r1:Concept_innovaphone_App_Platform_Container&amp;diff=79178</id>
		<title>Reference16r1:Concept innovaphone App Platform Container</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Reference16r1:Concept_innovaphone_App_Platform_Container&amp;diff=79178"/>
		<updated>2026-03-17T13:34:28Z</updated>

		<summary type="html">&lt;p&gt;Nfi: /* Additional Application Ports */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{FIXME|reason=Below described feature is experimental and not officially supported for use in productive environments.}}&lt;br /&gt;
The innovaphone App Platform Docker container provides a myApps App Platform instance that includes the AP Manager, Webserver and PostgreSQL. This container offers a ready-to-use environment for myApps applications and the innovaphone PBX.&lt;br /&gt;
&lt;br /&gt;
== Applies To == &lt;br /&gt;
&lt;br /&gt;
* innovaphone App Platform Docker Container&lt;br /&gt;
&lt;br /&gt;
==Requirements==&lt;br /&gt;
* Host with docker on a x86_64 (arm64) platform&lt;br /&gt;
* innovaphone App Platform Docker Container&lt;br /&gt;
&lt;br /&gt;
==Concept==&lt;br /&gt;
&lt;br /&gt;
The innovaphone App Platform Docker Container provides the innovaphone App Platform for docker environments. &lt;br /&gt;
&lt;br /&gt;
* The App Platform Manager and Webserver Apps are already integrated in the container and provide the already known functionality.&lt;br /&gt;
* Apps are installed, updated and managed as usual.&lt;br /&gt;
* The mount point will be used for the database, the App binaries and log files.&lt;br /&gt;
&lt;br /&gt;
==Image Information==&lt;br /&gt;
&lt;br /&gt;
This chapter provides details about the Docker image used for the innovaphone App Platform.&lt;br /&gt;
&lt;br /&gt;
===Repository Details===&lt;br /&gt;
&lt;br /&gt;
;Repository Host : docker.innovaphone.com&lt;br /&gt;
;Image Name : cloud/kubernetes/innovaphone-platform-instance&lt;br /&gt;
&lt;br /&gt;
 docker.innovaphone.com/cloud/kubernetes/innovaphone-platform-instance:latest&lt;br /&gt;
&lt;br /&gt;
===Tagging and Versioning===&lt;br /&gt;
The image is usually tagged with the build number according to innovaphone software releases:&lt;br /&gt;
&lt;br /&gt;
;Latest Tag : Use the latest tag for pulling the most recent service release.&lt;br /&gt;
&lt;br /&gt;
;Release Build Number : For production or version-specific deployments, use a specific build number as the tag (e.g., 130006).&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
 docker pull docker.innovaphone.com/cloud/kubernetes/innovaphone-platform-instance:130006&lt;br /&gt;
&lt;br /&gt;
===Supported Architecture===&lt;br /&gt;
This Docker image supports the &amp;lt;code&amp;gt;linux/amd64&amp;lt;/code&amp;gt; architecture.&lt;br /&gt;
&lt;br /&gt;
===Image Reference===&lt;br /&gt;
An example of a full image reference using a specific release build number would be:&lt;br /&gt;
 docker.innovaphone.com/cloud/kubernetes/innovaphone-platform-instance:130006&lt;br /&gt;
&lt;br /&gt;
==Ports==&lt;br /&gt;
This chapter outlines the various ports exposed by the Docker container. The webserver ports are available immediately upon container startup, after start of the AP Manager and the Webserver, while the additional application ports become active after the app installation. In most cases, a one-to-one mapping is used, meaning the container port is mapped directly to the same host port unless otherwise specified.&lt;br /&gt;
&lt;br /&gt;
===Ports &amp;lt; 1024===&lt;br /&gt;
On most docker hosts, a container won&#039;t be able to use ports below 1024, unless the container is started with higher privileges. &lt;br /&gt;
This shouldn&#039;t be neccessary anyways as all ports can be configured to higher ports.&lt;br /&gt;
&lt;br /&gt;
===Webserver Ports===&lt;br /&gt;
;HTTP:&lt;br /&gt;
Container Port: 8080&lt;br /&gt;
Description: Used for accessing the built-in webserver immediately upon container startup.&lt;br /&gt;
&lt;br /&gt;
;HTTPS:&lt;br /&gt;
Container Port: 8082&lt;br /&gt;
Description: Used for accessing the built-in webserver immediately upon container startup.&lt;br /&gt;
&lt;br /&gt;
=== Additional Application Ports===&lt;br /&gt;
Following additional container ports are avilable depending on installed and configured applications:&lt;br /&gt;
;H323/TLS : 1300&lt;br /&gt;
;SIP : 5060&lt;br /&gt;
;SIPS : 5061&lt;br /&gt;
;LDAPS : 1636&lt;br /&gt;
;SMTP : 8025&lt;br /&gt;
;SMTPS : 8587&lt;br /&gt;
;STUN/TURN : 3478 UDP/TCP&lt;br /&gt;
&#039;&#039;&#039;Additional hint for Portmapping&#039;&#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
docker run -d \&lt;br /&gt;
  --name=innovaphone \&lt;br /&gt;
  --restart unless-stopped \&lt;br /&gt;
  -p 9090:8080 \        #Container Host Port (external) 9090:8080 Container Port&lt;br /&gt;
  -p 9091:8082 \&lt;br /&gt;
  -p 5060:5060 \&lt;br /&gt;
  -p 5061:5061 \&lt;br /&gt;
  -p 1300:1300 \&lt;br /&gt;
  -p 1636:1636 \&lt;br /&gt;
  -p 8025:8025 \&lt;br /&gt;
  -p 8587:8587 \&lt;br /&gt;
  -p 3478:3478 \&lt;br /&gt;
  -p 3478:3478/udp \&lt;br /&gt;
  -v /path/of/data/innovaphone:/mnt/data \      #in this path you will find Apps, DBs &amp;amp; Logs&lt;br /&gt;
                                                #this path musst be used for backups!!&lt;br /&gt;
  -e WEBSERVERPORTHTTP=8080 \&lt;br /&gt;
  -e WEBSERVERPORTHTTPS=8082 \&lt;br /&gt;
  -e LOG_FLAGS=7 \&lt;br /&gt;
  -e LOG_SIZE=1048576 \&lt;br /&gt;
  -e DNSIPV4=8.8.8.8 \&lt;br /&gt;
  -e LIMIT_RAM=512 \        #Ram limit in MB&lt;br /&gt;
  -e LIMIT_DISK=10 \        #disk size in GB&lt;br /&gt;
  -e TZ=Europe/Berlin \&lt;br /&gt;
  docker.innovaphone.com/cloud/kubernetes/innovaphone-platform-instance:latest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Environment Variables (ENVs)==&lt;br /&gt;
This chapter outlines the key environment variables used to configure the behavior of the innovaphone App Platform Docker container. These variables allow you to customize logging, port settings, resource limits, and more during startup and runtime.&lt;br /&gt;
&lt;br /&gt;
;LOG_FLAGS : Defines the integer representation for the trace flags of the AP Manager, according flags activated under the AP Manager / Diagnostics. See browser console message on Save button press (e.g. &amp;quot;logFlags&amp;quot;:1 , if the &amp;quot;App&amp;quot; flag is activated).&lt;br /&gt;
 LOG_FLAGS=7&lt;br /&gt;
;LOG_SIZE : Specifies the maximum size in bytes for logs before rotation or management actions occur. Default: 5242880.&lt;br /&gt;
 LOG_SIZE=1048576&lt;br /&gt;
;WEBSERVERPORTHTTP : Sets the in-container HTTP port for the webserver. Default: 8080.&lt;br /&gt;
 WEBSERVERPORTHTTP=8080&lt;br /&gt;
;WEBSERVERPORTHTTPS : Sets the in-container HTTPS port for the webserver. Default: 8082.&lt;br /&gt;
 WEBSERVERPORTHTTPS=8443&lt;br /&gt;
;DNSIPV4 : Specifies the in-container DNS server IPv4 address for DNS resolution. Overrides the default container runtime DNS server.&lt;br /&gt;
 DNSIPV4=8.8.8.8&lt;br /&gt;
;DNS_DOMAIN : The FQDN of the App Platform that can be used to access the app services. This optional parameter is used as a static DNS entry added to /etc/hosts. The destination IP address is the resolved IP address behind INTERNAL_DNS_DOMAIN or NAMESPACE.&lt;br /&gt;
 DNS_DOMAIN=ap.example.com&lt;br /&gt;
;INTERNAL_DNS_DOMAIN : The internal FQDN of the App Platform. This FQDN is used to resolve the internal IP address of the App Platform, to be mapped from DNS_DOMAIN in /etc/hosts.&lt;br /&gt;
 INTERNAL_DNS_DOMAIN=my-apps-deployment.my-namespace.svc.cluster.local&lt;br /&gt;
;NAMESPACE : The Kubernetes namespace used to build internal FQDN of the App Platform. Used with DNS_DOMAIN to map it to the IP address of ap.my-namespace.svc.cluster.local.&lt;br /&gt;
 NAMESPACE=my-namespace&lt;br /&gt;
;LIMIT_RAM : Sets the RAM limit for the container, in MB, controlling how much memory it may consume. Used by AP Manager to stop the app instances on overconsumption.&lt;br /&gt;
 LIMIT_RAM=512&lt;br /&gt;
;LIMIT_DISK : Defines the disk space limit in GB for the container to manage storage consumption. Used by AP Manager to stop the app instances on overconsumption.&lt;br /&gt;
 LIMIT_DISK=10&lt;br /&gt;
&lt;br /&gt;
==Volumes and Mounts==&lt;br /&gt;
This container uses a dedicated internal mount path for the persistent data management across container restarts and updates.&lt;br /&gt;
&lt;br /&gt;
===Internal Data Volume===&lt;br /&gt;
;Mount Path : &amp;lt;code&amp;gt;/mnt/data&amp;lt;/code&amp;gt;&lt;br /&gt;
;Contents:&lt;br /&gt;
*Apps: Installed application binaries.&lt;br /&gt;
*Databases: PostgreSQL files.&lt;br /&gt;
*Logging: Log files for system and application events.&lt;br /&gt;
&lt;br /&gt;
===Mounting===&lt;br /&gt;
To ensure that your data is preserved, map a host directory or Docker named volume to the container&#039;s /mnt/data path when running the container.&lt;br /&gt;
For example:&lt;br /&gt;
 docker run -d -v /path/on/host:/mnt/data docker.innovaphone.com/cloud/kubernetes/innovaphone-platform-instance:130006&lt;br /&gt;
&lt;br /&gt;
This setup guarantees that your apps, associated data, databases, and logs persist independently of the container lifecycle.&lt;br /&gt;
&lt;br /&gt;
==Entrypoint==&lt;br /&gt;
The container uses a fixed entrypoint:&lt;br /&gt;
 ENTRYPOINT [&amp;quot;/entrypoint.sh&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
This script prepares the container and starts the AP Manager executable.&lt;br /&gt;
&lt;br /&gt;
==Logging and Monitoring==&lt;br /&gt;
The log of the entrypoint.sh and of the AP manager is avilable as conatiner output. The installed applications store the ir log files under &amp;lt;code&amp;gt;/mnt/data/var/log/apps/&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Usage Example==&lt;br /&gt;
 sudo docker run -d --restart unless-stopped --name innovaphoneAP -p 9090:8080 -p 9091:8082 -e WEBSERVERPORTHTTP=8080 -e WEBSERVERPORTHTTPS=8082 -v $(pwd)/myapps/:/mnt/data docker.innovaphone.com/cloud/kubernetes/innovaphone-platform-instance:latest&lt;br /&gt;
&lt;br /&gt;
This command runs the container in detached mode with automatic restart. It names the container innovaphoneAP, maps host ports 9090 and 9091 to the container&#039;s HTTP and HTTPS ports, sets the webserver port environment variables, mounts a host directory to /mnt/data, and starts the AP Manager. After container start up the AP manager web UI is accessible via &amp;lt;code&amp;gt;http://localhost:9090&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;https://localhost:9091&amp;lt;/code&amp;gt;.&lt;/div&gt;</summary>
		<author><name>Nfi</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Reference16r1:Concept_innovaphone_App_Platform_Container&amp;diff=79177</id>
		<title>Reference16r1:Concept innovaphone App Platform Container</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Reference16r1:Concept_innovaphone_App_Platform_Container&amp;diff=79177"/>
		<updated>2026-03-17T13:33:33Z</updated>

		<summary type="html">&lt;p&gt;Nfi: /* Additional Application Ports */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{FIXME|reason=Below described feature is experimental and not officially supported for use in productive environments.}}&lt;br /&gt;
The innovaphone App Platform Docker container provides a myApps App Platform instance that includes the AP Manager, Webserver and PostgreSQL. This container offers a ready-to-use environment for myApps applications and the innovaphone PBX.&lt;br /&gt;
&lt;br /&gt;
== Applies To == &lt;br /&gt;
&lt;br /&gt;
* innovaphone App Platform Docker Container&lt;br /&gt;
&lt;br /&gt;
==Requirements==&lt;br /&gt;
* Host with docker on a x86_64 (arm64) platform&lt;br /&gt;
* innovaphone App Platform Docker Container&lt;br /&gt;
&lt;br /&gt;
==Concept==&lt;br /&gt;
&lt;br /&gt;
The innovaphone App Platform Docker Container provides the innovaphone App Platform for docker environments. &lt;br /&gt;
&lt;br /&gt;
* The App Platform Manager and Webserver Apps are already integrated in the container and provide the already known functionality.&lt;br /&gt;
* Apps are installed, updated and managed as usual.&lt;br /&gt;
* The mount point will be used for the database, the App binaries and log files.&lt;br /&gt;
&lt;br /&gt;
==Image Information==&lt;br /&gt;
&lt;br /&gt;
This chapter provides details about the Docker image used for the innovaphone App Platform.&lt;br /&gt;
&lt;br /&gt;
===Repository Details===&lt;br /&gt;
&lt;br /&gt;
;Repository Host : docker.innovaphone.com&lt;br /&gt;
;Image Name : cloud/kubernetes/innovaphone-platform-instance&lt;br /&gt;
&lt;br /&gt;
 docker.innovaphone.com/cloud/kubernetes/innovaphone-platform-instance:latest&lt;br /&gt;
&lt;br /&gt;
===Tagging and Versioning===&lt;br /&gt;
The image is usually tagged with the build number according to innovaphone software releases:&lt;br /&gt;
&lt;br /&gt;
;Latest Tag : Use the latest tag for pulling the most recent service release.&lt;br /&gt;
&lt;br /&gt;
;Release Build Number : For production or version-specific deployments, use a specific build number as the tag (e.g., 130006).&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
 docker pull docker.innovaphone.com/cloud/kubernetes/innovaphone-platform-instance:130006&lt;br /&gt;
&lt;br /&gt;
===Supported Architecture===&lt;br /&gt;
This Docker image supports the &amp;lt;code&amp;gt;linux/amd64&amp;lt;/code&amp;gt; architecture.&lt;br /&gt;
&lt;br /&gt;
===Image Reference===&lt;br /&gt;
An example of a full image reference using a specific release build number would be:&lt;br /&gt;
 docker.innovaphone.com/cloud/kubernetes/innovaphone-platform-instance:130006&lt;br /&gt;
&lt;br /&gt;
==Ports==&lt;br /&gt;
This chapter outlines the various ports exposed by the Docker container. The webserver ports are available immediately upon container startup, after start of the AP Manager and the Webserver, while the additional application ports become active after the app installation. In most cases, a one-to-one mapping is used, meaning the container port is mapped directly to the same host port unless otherwise specified.&lt;br /&gt;
&lt;br /&gt;
===Ports &amp;lt; 1024===&lt;br /&gt;
On most docker hosts, a container won&#039;t be able to use ports below 1024, unless the container is started with higher privileges. &lt;br /&gt;
This shouldn&#039;t be neccessary anyways as all ports can be configured to higher ports.&lt;br /&gt;
&lt;br /&gt;
===Webserver Ports===&lt;br /&gt;
;HTTP:&lt;br /&gt;
Container Port: 8080&lt;br /&gt;
Description: Used for accessing the built-in webserver immediately upon container startup.&lt;br /&gt;
&lt;br /&gt;
;HTTPS:&lt;br /&gt;
Container Port: 8082&lt;br /&gt;
Description: Used for accessing the built-in webserver immediately upon container startup.&lt;br /&gt;
&lt;br /&gt;
=== Additional Application Ports===&lt;br /&gt;
Following additional container ports are avilable depending on installed and configured applications:&lt;br /&gt;
;H323/TLS : 1300&lt;br /&gt;
;SIP : 5060&lt;br /&gt;
;SIPS : 5061&lt;br /&gt;
;LDAPS : 1636&lt;br /&gt;
;SMTP : 8025&lt;br /&gt;
;SMTPS : 8587&lt;br /&gt;
;STUN/TURN : 3479 UDP/TCP&lt;br /&gt;
&#039;&#039;&#039;Additional hint for Portmapping&#039;&#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
docker run -d \&lt;br /&gt;
  --name=innovaphone \&lt;br /&gt;
  --restart unless-stopped \&lt;br /&gt;
  -p 9090:8080 \        #Container Host Port (external) 9090:8080 Container Port&lt;br /&gt;
  -p 9091:8082 \&lt;br /&gt;
  -p 5060:5060 \&lt;br /&gt;
  -p 5061:5061 \&lt;br /&gt;
  -p 1300:1300 \&lt;br /&gt;
  -p 1636:1636 \&lt;br /&gt;
  -p 8025:8025 \&lt;br /&gt;
  -p 8587:8587 \&lt;br /&gt;
  -p 3478:3478 \&lt;br /&gt;
  -p 3478:3478/udp \&lt;br /&gt;
  -v /path/of/data/innovaphone:/mnt/data \      #in this path you will find Apps, DBs &amp;amp; Logs&lt;br /&gt;
                                                #this path musst be used for backups!!&lt;br /&gt;
  -e WEBSERVERPORTHTTP=8080 \&lt;br /&gt;
  -e WEBSERVERPORTHTTPS=8082 \&lt;br /&gt;
  -e LOG_FLAGS=7 \&lt;br /&gt;
  -e LOG_SIZE=1048576 \&lt;br /&gt;
  -e DNSIPV4=8.8.8.8 \&lt;br /&gt;
  -e LIMIT_RAM=512 \        #Ram limit in MB&lt;br /&gt;
  -e LIMIT_DISK=10 \        #disk size in GB&lt;br /&gt;
  -e TZ=Europe/Berlin \&lt;br /&gt;
  docker.innovaphone.com/cloud/kubernetes/innovaphone-platform-instance:latest&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Environment Variables (ENVs)==&lt;br /&gt;
This chapter outlines the key environment variables used to configure the behavior of the innovaphone App Platform Docker container. These variables allow you to customize logging, port settings, resource limits, and more during startup and runtime.&lt;br /&gt;
&lt;br /&gt;
;LOG_FLAGS : Defines the integer representation for the trace flags of the AP Manager, according flags activated under the AP Manager / Diagnostics. See browser console message on Save button press (e.g. &amp;quot;logFlags&amp;quot;:1 , if the &amp;quot;App&amp;quot; flag is activated).&lt;br /&gt;
 LOG_FLAGS=7&lt;br /&gt;
;LOG_SIZE : Specifies the maximum size in bytes for logs before rotation or management actions occur. Default: 5242880.&lt;br /&gt;
 LOG_SIZE=1048576&lt;br /&gt;
;WEBSERVERPORTHTTP : Sets the in-container HTTP port for the webserver. Default: 8080.&lt;br /&gt;
 WEBSERVERPORTHTTP=8080&lt;br /&gt;
;WEBSERVERPORTHTTPS : Sets the in-container HTTPS port for the webserver. Default: 8082.&lt;br /&gt;
 WEBSERVERPORTHTTPS=8443&lt;br /&gt;
;DNSIPV4 : Specifies the in-container DNS server IPv4 address for DNS resolution. Overrides the default container runtime DNS server.&lt;br /&gt;
 DNSIPV4=8.8.8.8&lt;br /&gt;
;DNS_DOMAIN : The FQDN of the App Platform that can be used to access the app services. This optional parameter is used as a static DNS entry added to /etc/hosts. The destination IP address is the resolved IP address behind INTERNAL_DNS_DOMAIN or NAMESPACE.&lt;br /&gt;
 DNS_DOMAIN=ap.example.com&lt;br /&gt;
;INTERNAL_DNS_DOMAIN : The internal FQDN of the App Platform. This FQDN is used to resolve the internal IP address of the App Platform, to be mapped from DNS_DOMAIN in /etc/hosts.&lt;br /&gt;
 INTERNAL_DNS_DOMAIN=my-apps-deployment.my-namespace.svc.cluster.local&lt;br /&gt;
;NAMESPACE : The Kubernetes namespace used to build internal FQDN of the App Platform. Used with DNS_DOMAIN to map it to the IP address of ap.my-namespace.svc.cluster.local.&lt;br /&gt;
 NAMESPACE=my-namespace&lt;br /&gt;
;LIMIT_RAM : Sets the RAM limit for the container, in MB, controlling how much memory it may consume. Used by AP Manager to stop the app instances on overconsumption.&lt;br /&gt;
 LIMIT_RAM=512&lt;br /&gt;
;LIMIT_DISK : Defines the disk space limit in GB for the container to manage storage consumption. Used by AP Manager to stop the app instances on overconsumption.&lt;br /&gt;
 LIMIT_DISK=10&lt;br /&gt;
&lt;br /&gt;
==Volumes and Mounts==&lt;br /&gt;
This container uses a dedicated internal mount path for the persistent data management across container restarts and updates.&lt;br /&gt;
&lt;br /&gt;
===Internal Data Volume===&lt;br /&gt;
;Mount Path : &amp;lt;code&amp;gt;/mnt/data&amp;lt;/code&amp;gt;&lt;br /&gt;
;Contents:&lt;br /&gt;
*Apps: Installed application binaries.&lt;br /&gt;
*Databases: PostgreSQL files.&lt;br /&gt;
*Logging: Log files for system and application events.&lt;br /&gt;
&lt;br /&gt;
===Mounting===&lt;br /&gt;
To ensure that your data is preserved, map a host directory or Docker named volume to the container&#039;s /mnt/data path when running the container.&lt;br /&gt;
For example:&lt;br /&gt;
 docker run -d -v /path/on/host:/mnt/data docker.innovaphone.com/cloud/kubernetes/innovaphone-platform-instance:130006&lt;br /&gt;
&lt;br /&gt;
This setup guarantees that your apps, associated data, databases, and logs persist independently of the container lifecycle.&lt;br /&gt;
&lt;br /&gt;
==Entrypoint==&lt;br /&gt;
The container uses a fixed entrypoint:&lt;br /&gt;
 ENTRYPOINT [&amp;quot;/entrypoint.sh&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
This script prepares the container and starts the AP Manager executable.&lt;br /&gt;
&lt;br /&gt;
==Logging and Monitoring==&lt;br /&gt;
The log of the entrypoint.sh and of the AP manager is avilable as conatiner output. The installed applications store the ir log files under &amp;lt;code&amp;gt;/mnt/data/var/log/apps/&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Usage Example==&lt;br /&gt;
 sudo docker run -d --restart unless-stopped --name innovaphoneAP -p 9090:8080 -p 9091:8082 -e WEBSERVERPORTHTTP=8080 -e WEBSERVERPORTHTTPS=8082 -v $(pwd)/myapps/:/mnt/data docker.innovaphone.com/cloud/kubernetes/innovaphone-platform-instance:latest&lt;br /&gt;
&lt;br /&gt;
This command runs the container in detached mode with automatic restart. It names the container innovaphoneAP, maps host ports 9090 and 9091 to the container&#039;s HTTP and HTTPS ports, sets the webserver port environment variables, mounts a host directory to /mnt/data, and starts the AP Manager. After container start up the AP manager web UI is accessible via &amp;lt;code&amp;gt;http://localhost:9090&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;https://localhost:9091&amp;lt;/code&amp;gt;.&lt;/div&gt;</summary>
		<author><name>Nfi</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Reference16r1:Concept_App_Service_IP&amp;diff=79156</id>
		<title>Reference16r1:Concept App Service IP</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Reference16r1:Concept_App_Service_IP&amp;diff=79156"/>
		<updated>2026-03-16T12:51:37Z</updated>

		<summary type="html">&lt;p&gt;Nfi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Concept|Apps]]&lt;br /&gt;
[[Category:Concept|IP]]&lt;br /&gt;
&lt;br /&gt;
The App IP is an app which offers the PBX functionality and further functionalities as App service on our innovaphone App Platform.&lt;br /&gt;
&lt;br /&gt;
== Applies To == &lt;br /&gt;
&lt;br /&gt;
* innovaphone firmware and apps V16&lt;br /&gt;
&lt;br /&gt;
==Requirements==&lt;br /&gt;
* innovaphone Application Platform (image version 140011 or higher)&lt;br /&gt;
&lt;br /&gt;
==Concept==&lt;br /&gt;
&lt;br /&gt;
The App IP offers modules known from innovaphone gateways, like the PBX, TURN server functionality etc.&lt;br /&gt;
&lt;br /&gt;
==How it works==&lt;br /&gt;
&lt;br /&gt;
=== Single instance mode ===&lt;br /&gt;
Unlike other App Services, the App IP is a single instance App Service, so you can create &#039;&#039;&#039;just&#039;&#039;&#039; a single instance and not multiple instances.&lt;br /&gt;
&lt;br /&gt;
== Licensing ==&lt;br /&gt;
Standard licensing mechanisms apply to the App IP as they apply to innovaphone gateways.&lt;br /&gt;
&lt;br /&gt;
In addition, every port license requires a dedicated IPAP license (similar to the IPVA license for virtual machines).&lt;br /&gt;
&lt;br /&gt;
== Apps ==&lt;br /&gt;
&lt;br /&gt;
There is no App provided by this App Service.&lt;br /&gt;
&lt;br /&gt;
== PBX Manager Plugins ==&lt;br /&gt;
&lt;br /&gt;
There is no PBX Manager Plugin provided by this App Service.&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
The configuration is done as an innovaphone gateway is configured too.&lt;br /&gt;
&lt;br /&gt;
=== Create instance ===&lt;br /&gt;
You have to create one instance for the App IP Service.&lt;br /&gt;
&lt;br /&gt;
[[Courseware:IT Advanced - 04 Setting up the Application Platform#Adding an App Service instance|Here]] are more informations how to do this.&lt;br /&gt;
&lt;br /&gt;
We recommend the following settings:&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Name&#039;&#039;&#039; = ip&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Domain&#039;&#039;&#039; = customer domain (system name of the PBX)&lt;br /&gt;
&lt;br /&gt;
=== Install Process ===&lt;br /&gt;
Install can be started under the webserver path of the App IP instance and /&#039;&#039;install.htm&#039;&#039;, e.g.: https://domain.com/ip/install.htm&lt;br /&gt;
&lt;br /&gt;
=== Advanced UI ===&lt;br /&gt;
The advanced UI is reachable under the webserver path of the App IP instance and /admin.xml?xsl=admin.xsl, e.g.:&lt;br /&gt;
https://domain.com/ip/admin.xml?xsl=admin.xsl&lt;br /&gt;
&lt;br /&gt;
=== IP configuration ===&lt;br /&gt;
As the App IP is just an App on an App Platform, there are no IP4/IP6, NTP etc. settings as on other innovaphone devices.&lt;br /&gt;
&lt;br /&gt;
==== Devices App ====&lt;br /&gt;
If your App Platform which runs the App IP is connected to a Devices App, you can access the Advanced UI with the &#039;&#039;&#039;PBX&#039;&#039;&#039; tab of your App Platform device.&lt;br /&gt;
&lt;br /&gt;
==Troubleshooting==&lt;br /&gt;
&lt;br /&gt;
The App IP offers standard tracing mechanism for App Services and in addition mechanisms known from innovaphone gateways.&amp;lt;br/&amp;gt;&lt;br /&gt;
You can enable module related trace flags with config change commands or by setting trace flags under Maintenance -&amp;gt; Tracing in the Advanced UI of the App IP.&lt;br /&gt;
&lt;br /&gt;
 Trace files are not found under Maintenance -&amp;gt; Tracing but on the App IP service on your App Platform Manager.&lt;br /&gt;
&lt;br /&gt;
==Known issues==&lt;br /&gt;
&lt;br /&gt;
==Related Articles==&lt;br /&gt;
* [[Reference16r1:Concept_innovaphone_App_Platform_Docker_Container]]&lt;/div&gt;</summary>
		<author><name>Nfi</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Reference16r1:Concept_App_Service_IP&amp;diff=79155</id>
		<title>Reference16r1:Concept App Service IP</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Reference16r1:Concept_App_Service_IP&amp;diff=79155"/>
		<updated>2026-03-16T12:48:47Z</updated>

		<summary type="html">&lt;p&gt;Nfi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Concept|Apps]]&lt;br /&gt;
[[Category:Concept|IP]]&lt;br /&gt;
&lt;br /&gt;
The App IP is an app which offers the PBX functionality and further functionalities as App service on our innovaphone App Platform.&lt;br /&gt;
&lt;br /&gt;
== Applies To == &lt;br /&gt;
&lt;br /&gt;
* innovaphone firmware and apps V16&lt;br /&gt;
&lt;br /&gt;
==Requirements==&lt;br /&gt;
* innovaphone Application Platform (image version 140011 or higher)&lt;br /&gt;
&lt;br /&gt;
==Concept==&lt;br /&gt;
&lt;br /&gt;
The App IP offers modules known from innovaphone gateways, like the PBX, TURN server functionality etc.&lt;br /&gt;
&lt;br /&gt;
==How it works==&lt;br /&gt;
&lt;br /&gt;
=== Single instance mode ===&lt;br /&gt;
Unlike other App Services, the App IP is a single instance App Service, so you can create &#039;&#039;&#039;just&#039;&#039;&#039; a single instance and not multiple instances.&lt;br /&gt;
&lt;br /&gt;
== Licensing ==&lt;br /&gt;
Standard licensing mechanisms apply to the App IP as they apply to innovaphone gateways.&lt;br /&gt;
&lt;br /&gt;
In addition, every port license requires a dedicated IPAP license (similar to the IPVA license for virtual machines).&lt;br /&gt;
&lt;br /&gt;
== Apps ==&lt;br /&gt;
&lt;br /&gt;
There is no App provided by this App Service.&lt;br /&gt;
&lt;br /&gt;
== PBX Manager Plugins ==&lt;br /&gt;
&lt;br /&gt;
There is no PBX Manager Plugin provided by this App Service.&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
The configuration is done as an innovaphone gateway is configured too.&lt;br /&gt;
&lt;br /&gt;
=== Create instance ===&lt;br /&gt;
You have to create one instance for the App IP Service.&lt;br /&gt;
&lt;br /&gt;
[[Courseware:IT Advanced - 04 Setting up the Application Platform#Adding an App Service instance|Here]] are more informations how to do this.&lt;br /&gt;
&lt;br /&gt;
We recommend the following settings:&amp;lt;br/&amp;gt;&lt;br /&gt;
Name = ip&amp;lt;br/&amp;gt;&lt;br /&gt;
Domain = customer domain (system name of the PBX)&lt;br /&gt;
&lt;br /&gt;
=== Advanced UI ===&lt;br /&gt;
The advanced UI is reachable under the webserver path of the App IP instance and /admin.xml?xsl=admin.xsl, e.g.:&lt;br /&gt;
https://domain.com/ip/admin.xml?xsl=admin.xsl&lt;br /&gt;
&lt;br /&gt;
=== IP configuration ===&lt;br /&gt;
As the App IP is just an App on an App Platform, there are no IP4/IP6, NTP etc. settings as on other innovaphone devices.&lt;br /&gt;
&lt;br /&gt;
==== Devices App ====&lt;br /&gt;
If your App Platform which runs the App IP is connected to a Devices App, you can access the Advanced UI with the &#039;&#039;&#039;PBX&#039;&#039;&#039; tab of your App Platform device.&lt;br /&gt;
&lt;br /&gt;
==Troubleshooting==&lt;br /&gt;
&lt;br /&gt;
The App IP offers standard tracing mechanism for App Services and in addition mechanisms known from innovaphone gateways.&amp;lt;br/&amp;gt;&lt;br /&gt;
You can enable module related trace flags with config change commands or by setting trace flags under Maintenance -&amp;gt; Tracing in the Advanced UI of the App IP.&lt;br /&gt;
&lt;br /&gt;
 Trace files are not found under Maintenance -&amp;gt; Tracing but on the App IP service on your App Platform Manager.&lt;br /&gt;
&lt;br /&gt;
==Known issues==&lt;br /&gt;
&lt;br /&gt;
==Related Articles==&lt;br /&gt;
* [[Reference16r1:Concept_innovaphone_App_Platform_Docker_Container]]&lt;/div&gt;</summary>
		<author><name>Nfi</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=How_to_post_a_successful_Mantis_Request&amp;diff=78372</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=78372"/>
		<updated>2025-10-27T10:17:33Z</updated>

		<summary type="html">&lt;p&gt;Nfi: /* Fileuploads */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Applies to==&lt;br /&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;
== General conditions ==&lt;br /&gt;
Before opening a support case, please make sure that you:&lt;br /&gt;
* please only use one request per case&lt;br /&gt;
* significant subject&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;
* we will &#039;&#039;&#039;not accept&#039;&#039;&#039; files sent to us over other filehosters&lt;br /&gt;
===  Support ===&lt;br /&gt;
* tested the [http://store.innovaphone.com/ newest available build] on all your innovaphone device your request is for&lt;br /&gt;
* add in every case the Config with standard user and password&lt;br /&gt;
* save logs always in a .txt file and attach it to the request. Please, never paste it in to body directly&lt;br /&gt;
* save traces in a .pcap file and attach it to the request. 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;
* 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 reproducing and tracing the issue &lt;br /&gt;
* don&#039;t send traces/logs/configs without a decent description (who calls who at which time, what happens, what should happen)&lt;br /&gt;
&lt;br /&gt;
== General information ==&lt;br /&gt;
=== Real time support Requests ===&lt;br /&gt;
If you know you will have a difficult installation ahead, you may want to let us know 5 workdays before with a detailed description. 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 current case history is available from https://portal.innovaphone.com under &#039;&#039;Licences tab and then Support tab&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Fileuploads ===&lt;br /&gt;
In some cases, there will bigger files that you have to send. You can upload the files with a special file upload page for your case.&lt;br /&gt;
You need a &#039;&#039;secret link&#039;&#039; to get access to this page. You will find the [[File:Mantis Request 1.png|mantis_request_1.png/|mantis_request_1.png/]] in the ticket status page available via the Support link in https://portal.innovaphone.com/my/innovaphone.myportal.htm under &#039;&#039;Licences tab and then Support tab&#039;&#039;. This has the additional advantage that all tickets for your company are shown.&lt;br /&gt;
&lt;br /&gt;
If you want to know more about the information available in the ticket status page, please read [[ Understanding the innovaphone trouble ticket status page]]. If you have no access to portal.innovaphone.com or to your ticket status page, you can ask in the mantis case for a generated link that will allow you to upload files to your case.&lt;br /&gt;
&lt;br /&gt;
=== Understanding the state &amp;quot;closed&amp;quot; ===&lt;br /&gt;
An important realization is that the status &#039;&#039;closed&#039;&#039; is not a final status for us. This status is also used for tickets where there is no to-do for innovaphone Support or where we may be waiting for further data or feedback.&lt;br /&gt;
&lt;br /&gt;
In this respect, please note that we naturally also process cases that were resolved and then later received a response from you.&lt;br /&gt;
&lt;br /&gt;
The status &#039;&#039;closed&#039;&#039; is used for the following conditions&lt;br /&gt;
&lt;br /&gt;
* The problem is solved and the case is closed&lt;br /&gt;
* We have not received any feedback for more than 3 days&lt;br /&gt;
&lt;br /&gt;
Cases with the status &#039;&#039;closed&#039;&#039; can be reopened at any time by sending a reply by E-Mail. &lt;br /&gt;
&lt;br /&gt;
* The case will then be automatically reopened with the respective supporter &lt;br /&gt;
* File attachments are still retained (these will be removed 3 months after closing)&lt;br /&gt;
* The case retains all information on priority level and co&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;This means: If a case was temporarily closed, this is not a disadvantage and we and we can continue to process the case at any time.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==E-Mail Interface==&lt;br /&gt;
Here are some formal hints for successful request:&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;
Here are some hints to attach successful traces/logs/configs:&lt;br /&gt;
* attachment must not be bigger than 4 MB, if you have a bigger one please pack it into a zip-file or a rar-file&lt;br /&gt;
** if you have to upload bigger files you will find the link to the fileupload in your [[#Access to Case History|case history]]&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;
@source source of supply            (from which dealer, distributor did you purchase this product)&lt;br /&gt;
This information is important to determine who is the right partner to support you.&lt;br /&gt;
&lt;br /&gt;
@customer end customer              (where is this device in productive use?)&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;
===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;
 @aiglobal          no           possible values are: 0, 1, false, true (default is &amp;quot;false&amp;quot;)&lt;br /&gt;
                                 For faster processing and resolution, you can allow the use of AI services operated outside the EU in this case&lt;br /&gt;
 @customer          no           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 (separated by comma)&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;
 @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 presales 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;
===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;
==Web Interface==&lt;br /&gt;
The Interface is embedded in your Portal at https://portal.innovaphone.com/&lt;br /&gt;
=== Direct Access ===&lt;br /&gt;
You can access the interface directly via Browser or your own App-Object with the URL &amp;lt;code&amp;gt;https://mantis.innovaphone.com/create&amp;lt;/code&amp;gt;.&lt;br /&gt;
;URL Parameters&lt;br /&gt;
:scheme: light (default), dark&lt;br /&gt;
:email: pre-filled E-Mail Address&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
[[Category:News|{{PAGENAME}}]]&lt;br /&gt;
[[Category:Howto|{{PAGENAME}}]]&lt;/div&gt;</summary>
		<author><name>Nfi</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=How_to_post_a_successful_Mantis_Request&amp;diff=78371</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=78371"/>
		<updated>2025-10-27T10:17:09Z</updated>

		<summary type="html">&lt;p&gt;Nfi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Applies to==&lt;br /&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;
== General conditions ==&lt;br /&gt;
Before opening a support case, please make sure that you:&lt;br /&gt;
* please only use one request per case&lt;br /&gt;
* significant subject&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;
* we will &#039;&#039;&#039;not accept&#039;&#039;&#039; files sent to us over other filehosters&lt;br /&gt;
===  Support ===&lt;br /&gt;
* tested the [http://store.innovaphone.com/ newest available build] on all your innovaphone device your request is for&lt;br /&gt;
* add in every case the Config with standard user and password&lt;br /&gt;
* save logs always in a .txt file and attach it to the request. Please, never paste it in to body directly&lt;br /&gt;
* save traces in a .pcap file and attach it to the request. 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;
* 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 reproducing and tracing the issue &lt;br /&gt;
* don&#039;t send traces/logs/configs without a decent description (who calls who at which time, what happens, what should happen)&lt;br /&gt;
&lt;br /&gt;
== General information ==&lt;br /&gt;
=== Real time support Requests ===&lt;br /&gt;
If you know you will have a difficult installation ahead, you may want to let us know 5 workdays before with a detailed description. 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 current case history is available from https://portal.innovaphone.com under &#039;&#039;Licences tab and then Support tab&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Fileuploads ===&lt;br /&gt;
In some cases, there will bigger files that you have to send. You can upload the files with a special file upload page for your case.&lt;br /&gt;
You need a &#039;&#039;secret link&#039;&#039; to get access to this page. You will find the [[File:Mantis Request 1.png|Fileupload link|mantis_request_1.png/]] in the ticket status page available via the Support link in&amp;lt;nowiki/&amp;gt;https://portal.innovaphone.com/my/innovaphone.myportal.htm under &#039;&#039;Licences tab and then Support tab&#039;&#039;. This has the additional advantage that all tickets for your company are shown.&lt;br /&gt;
&lt;br /&gt;
If you want to know more about the information available in the ticket status page, please read [[ Understanding the innovaphone trouble ticket status page]]. If you have no access to portal.innovaphone.com or to your ticket status page, you can ask in the mantis case for a generated link that will allow you to upload files to your case.&lt;br /&gt;
&lt;br /&gt;
=== Understanding the state &amp;quot;closed&amp;quot; ===&lt;br /&gt;
An important realization is that the status &#039;&#039;closed&#039;&#039; is not a final status for us. This status is also used for tickets where there is no to-do for innovaphone Support or where we may be waiting for further data or feedback.&lt;br /&gt;
&lt;br /&gt;
In this respect, please note that we naturally also process cases that were resolved and then later received a response from you.&lt;br /&gt;
&lt;br /&gt;
The status &#039;&#039;closed&#039;&#039; is used for the following conditions&lt;br /&gt;
&lt;br /&gt;
* The problem is solved and the case is closed&lt;br /&gt;
* We have not received any feedback for more than 3 days&lt;br /&gt;
&lt;br /&gt;
Cases with the status &#039;&#039;closed&#039;&#039; can be reopened at any time by sending a reply by E-Mail. &lt;br /&gt;
&lt;br /&gt;
* The case will then be automatically reopened with the respective supporter &lt;br /&gt;
* File attachments are still retained (these will be removed 3 months after closing)&lt;br /&gt;
* The case retains all information on priority level and co&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;This means: If a case was temporarily closed, this is not a disadvantage and we and we can continue to process the case at any time.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==E-Mail Interface==&lt;br /&gt;
Here are some formal hints for successful request:&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;
Here are some hints to attach successful traces/logs/configs:&lt;br /&gt;
* attachment must not be bigger than 4 MB, if you have a bigger one please pack it into a zip-file or a rar-file&lt;br /&gt;
** if you have to upload bigger files you will find the link to the fileupload in your [[#Access to Case History|case history]]&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;
@source source of supply            (from which dealer, distributor did you purchase this product)&lt;br /&gt;
This information is important to determine who is the right partner to support you.&lt;br /&gt;
&lt;br /&gt;
@customer end customer              (where is this device in productive use?)&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;
===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;
 @aiglobal          no           possible values are: 0, 1, false, true (default is &amp;quot;false&amp;quot;)&lt;br /&gt;
                                 For faster processing and resolution, you can allow the use of AI services operated outside the EU in this case&lt;br /&gt;
 @customer          no           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 (separated by comma)&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;
 @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 presales 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;
===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;
==Web Interface==&lt;br /&gt;
The Interface is embedded in your Portal at https://portal.innovaphone.com/&lt;br /&gt;
=== Direct Access ===&lt;br /&gt;
You can access the interface directly via Browser or your own App-Object with the URL &amp;lt;code&amp;gt;https://mantis.innovaphone.com/create&amp;lt;/code&amp;gt;.&lt;br /&gt;
;URL Parameters&lt;br /&gt;
:scheme: light (default), dark&lt;br /&gt;
:email: pre-filled E-Mail Address&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
[[Category:News|{{PAGENAME}}]]&lt;br /&gt;
[[Category:Howto|{{PAGENAME}}]]&lt;/div&gt;</summary>
		<author><name>Nfi</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Main_Page&amp;diff=76889</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Main_Page&amp;diff=76889"/>
		<updated>2025-06-12T06:40:38Z</updated>

		<summary type="html">&lt;p&gt;Nfi: Wrong protocol HTTP -&amp;gt; HTTPS&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&amp;lt;!-- Message of the day --&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin:0px; margin-right:10px; border:1px solid #58C4C3; background-color:#F4F4F4; padding:0em 1em 0em 1em;&amp;quot;&amp;gt;&lt;br /&gt;
== Remote Support ==&lt;br /&gt;
[[Image: RemoteControl.png|left|50px|remotecontrol.png/|remotecontrol.png/]]&lt;br /&gt;
As Remote Support Tool, we use our own product [https://www.innovaphone.com/en/all-apps/apps-to-work-with/remote-control-app.html Remote Control]. innovaphone only carries out scheduled remote maintenance via our ticket system by prior consultation. &lt;br /&gt;
&lt;br /&gt;
You will receive a support link from our support team, which you can use to download and install the necessary client.&lt;br /&gt;
&lt;br /&gt;
After you have opened [https://store.innovaphone.com/alpha/download/software/remotecontrolwindowsportable/16r1/remoteControl.exe the client], you can enter the support link and then join the session.&lt;br /&gt;
&lt;br /&gt;
== Searching ==&lt;br /&gt;
Searching in wiki works, but is sometimes cumbersome.  However, you can have Google do the job for you.  Try [https://www.google.de/search?q=site%3Ainnovaphone.com+xml+documentation &amp;lt;code&amp;gt;site:innovaphone.com your search terms&amp;lt;/code&amp;gt;] to search the innovaphone sites for matches!&lt;br /&gt;
&lt;br /&gt;
If you still don&#039;t find what you are looking for, [mailto:presales@innovaphone.com drop us a message]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- latest news commented out, may be reactivated once there are new really --&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin:0px; margin-right:10px; margin-top:15px; border:1px solid #58C4C3; background-color:#F4F4F4; padding:0em 1em 0.5em 1em;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- please insert new message ON TOP and remove extraneous (more than 5) old messages --&amp;gt;&lt;br /&gt;
&amp;lt;!-- &amp;lt;nowiki&amp;gt; ~~~~ is replaced by your name and date automatically &amp;lt;/nowiki&amp;gt; --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Latest News ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;right&amp;quot;&amp;gt;[[User:Cam&amp;amp;action=edit&amp;amp;redlink=1|Cam]] ([[User talk:Cam&amp;amp;action=edit&amp;amp;redlink=1|talk]]) 09:33, 9 June 2025 (CEST)&amp;lt;/p&amp;gt; [[Support:Firmware V15r1 product/15r1/firmware 1510490 (sr 3) available| Version 15r1 Service Release 3]] is now available from the [https://store.innovaphone.com/release/download.htm App Store].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;right&amp;quot;&amp;gt;[[User:Cam&amp;amp;action=edit&amp;amp;redlink=1|Cam]] ([[User talk:Cam&amp;amp;action=edit&amp;amp;redlink=1|talk]]) 09:33, 9 June 2025 (CEST)&amp;lt;/p&amp;gt; [[Support:Firmware V14r2 product/14r2/firmware 1420515 (sr 11) available| Version 14r2 Service Release 11]] is now available from the [http://store.innovaphone.com/release/download.htm App Store].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;right&amp;quot;&amp;gt;[[User:Cam&amp;amp;action=edit&amp;amp;redlink=1|Cam]] ([[User talk:Cam&amp;amp;action=edit&amp;amp;redlink=1|talk]]) 09:33, 9 June 2025 (CEST)&amp;lt;/p&amp;gt; [[Support:Firmware V13r3 product/13r3/firmware 138026 (sr 28) available| Version 13r3 Service Release 28]] is now available from the [http://store.innovaphone.com/release/download.htm App Store].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;right&amp;quot;&amp;gt;[[User:Tfu|Tfu]] ([[User talk:Tfu&amp;amp;action=edit&amp;amp;redlink=1|talk]]) 15:28, 13 March 2025 (CEST)&amp;lt;/p&amp;gt;&lt;br /&gt;
[[Support:Wireless Handset Firmware IP73 1012 (6.1.13) released| Wireless Handset Firmware IP73 1012 (6.1.13) released]] is now available from the [https://store.innovaphone.com/release/download.htm App store].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;right&amp;quot;&amp;gt;[[User:Msu|Msu]] ([[User talk:Msu&amp;amp;action=edit&amp;amp;redlink=1|talk]]) 15:54, 18 February 2025 (CEST)&amp;lt;/p&amp;gt;&lt;br /&gt;
[[Support:Wireless Handset Firmware IP64 10317 (4.3.2)/IP65 10122 (4.3.2) released| Wireless Handset Firmware IP64 10317 (4.3.2)/IP65 10122 (4.3.2)]] is now available from the [https://store.innovaphone.com/release/download.htm App store].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;right&amp;quot;&amp;gt;[[User:Msu|Msu]] ([[User talk:Msu&amp;amp;action=edit&amp;amp;redlink=1|talk]]) 15:54, 18 February 2025 (CEST)&amp;lt;/p&amp;gt;&lt;br /&gt;
[[Support:Wireless Handset Firmware D83 10002 (2.0.5) released| Wireless Handset Firmware D83 10002 (2.0.5)]] is now available from the [https://store.innovaphone.com/release/download.htm App store].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;right&amp;quot;&amp;gt;[[User:Afi|Afi]] 15:38, 6 February 2023 (CET)&amp;lt;/p&amp;gt;&lt;br /&gt;
[[Support:Wireless Handset Firmware IP62 3040621 (6.2.7) released| Wireless Handset Firmware IP62 3040621 (6.2.7)]] is now available from the [https://store.innovaphone.com/release/download.htm App store].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;right&amp;quot;&amp;gt;[[User:Afi|Afi]] 13:13, 6 February 2023 (CET)&amp;lt;/p&amp;gt;&lt;br /&gt;
[[Support:WinPDM Software 3130113 (4.1.8) released| WinPDM Software 3130113 (4.1.8)]] is now available from the [https://store.innovaphone.com/release/download.htm App store].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;right&amp;quot;&amp;gt;[[User:Afi|Afi]] 12:46, 16 June 2021 (CEST))&amp;lt;/p&amp;gt;&lt;br /&gt;
[[Support:TAPI Service Provider 8188 (hotfix21) available|TAPI Service Provider 8188 (hotfix21)]] is now available from [https://store.innovaphone.com/release/download.htm the Software download area].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;right&amp;quot;&amp;gt;[[User:Afi|Afi]] 18:21, 12 October 2020 (CEST)&amp;lt;/p&amp;gt;&lt;br /&gt;
[[Support:Wireless Handset Firmware IP61 3022811 (4.7.8)/IP63 3022912 (4.7.8) released| Wireless Handset Firmware IP61 3022811 (4.7.8)/IP63 3022912 (4.7.8)]] is now available from the [https://store.innovaphone.com/release/download.htm App store].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p align=&amp;quot;right&amp;quot;&amp;gt;[[User:Afi|Afi]] 21:30, 27 March 2020 (CET)&amp;lt;/p&amp;gt;&lt;br /&gt;
[[Support:Wireless Handset Firmware and Management Software product/9.00/wireless 100037 (hotfix19) available| Wireless Package hotfix 19]] is now available from the [http://download.innovaphone.com/ice/9.00#wireless V9 download area].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin:0px; margin-right:10px; margin-top:15px; border:1px solid #58C4C3; background-color:#F4F4F4; padding:0em 1em 0.5em 1em;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== New Articles ==&lt;br /&gt;
&amp;lt;!-- https://www.mediawiki.org/wiki/Extension:Newest_Pages --&amp;gt;&lt;br /&gt;
{{Special:Newestpages/all/20}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin:0px; margin-right:10px; margin-top:15px; border:1px solid #58C4C3; background-color:#F4F4F4; padding:0em 1em 0.5em 1em; font-size:1&amp;quot;&amp;gt;&lt;br /&gt;
== More innovaphone Ressources ==&lt;br /&gt;
* [http://www.innovaphone.com Home Page]&lt;br /&gt;
* [http://download.innovaphone.com Download Site ]&lt;br /&gt;
* [http://my.innovaphone.com my.innovaphone ]&lt;br /&gt;
* [http://mantis.innovaphone.com/ Ticketing System ]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Nfi</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Reference14r2:MyApps_Plugin_for_Virtual_Desktops&amp;diff=76814</id>
		<title>Reference14r2:MyApps Plugin for Virtual Desktops</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Reference14r2:MyApps_Plugin_for_Virtual_Desktops&amp;diff=76814"/>
		<updated>2025-06-03T09:39:40Z</updated>

		<summary type="html">&lt;p&gt;Nfi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Concept|Apps]]&lt;br /&gt;
== Description ==&lt;br /&gt;
A softphone running at a terminal server (Citrix, Windows, ...) has the problem that audio and video streams start and terminate at the server.&lt;br /&gt;
Received audio from remote peer at the server must be transmitted to the local client for playback and audio delivered by the audio device must be also transmitted from the local client to the server for transmission to remote peer.&lt;br /&gt;
This transmission of the audio stream between server and client adds a delay which makes the communication impossible.&lt;br /&gt;
Video suffers from the same limitations. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
A new innovaphone product called myApps Plugin is being developed to provide offloading of the media data to the local client.&lt;br /&gt;
&lt;br /&gt;
== Applies To == &lt;br /&gt;
* innovaphone PBX from version 14r2&lt;br /&gt;
* Client OS: Windows, Linux (Ubuntu 22 or 23, RangeeOS&amp;lt;ref&amp;gt;RangeeOS is listed due to a customer testimonial. No tests have been conducted by innovaphone. Tests were done using myapps 14r2sr3, RangeeOS Firmware 12.00 build 203 ff and Citrix Workspace 2311. (Workspace version 2402 &amp;amp; 2405 have a bug with USB redirection and 2408 is not starting reliably)&amp;lt;/ref&amp;gt;, IGEL OS) or MacOS operating systems&lt;br /&gt;
* Hypervisor OS: Citrix, Windows Terminal Server environments and VMWare Horizon&amp;lt;ref&amp;gt;VMWare Horizon OS is listed due to a customer testimonial. No tests have been conducted by innovaphone.&amp;lt;/ref&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
* innovaphone PBX&lt;br /&gt;
* innovaphone myApps V14r2&lt;br /&gt;
* innovaphone myApps Plugin V14r2&lt;br /&gt;
* Firmware V14r2 final&lt;br /&gt;
&lt;br /&gt;
== Concept ==&lt;br /&gt;
&lt;br /&gt;
The myApps Plugin at the client is in charge of all tasks related to the media streams and the management of the Audio/Video devices. For instance: &lt;br /&gt;
&lt;br /&gt;
* start or stop an audio/video device&lt;br /&gt;
* gathering of the ICE candidates&lt;br /&gt;
* connect to a remote peer with the ICE protocol&lt;br /&gt;
* start a ringing device&lt;br /&gt;
* rendering of video&lt;br /&gt;
&lt;br /&gt;
But we now need a way of communicating between the myApps running at the terminal server and the myApps plugin running at the terminal client in order to carry out all these actions.&lt;br /&gt;
 &lt;br /&gt;
Main VDI Platforms (Citrix, Windows, VMware) provide a way of communicating between server and client through Virtual Channels:&lt;br /&gt;
&lt;br /&gt;
https://support.citrix.com/article/CTX116890/citrix-ica-virtual-channels-overview&lt;br /&gt;
&lt;br /&gt;
https://learn.microsoft.com/en-us/windows/win32/termserv/using-terminal-services-virtual-channels&lt;br /&gt;
&lt;br /&gt;
=== Call signaling ===&lt;br /&gt;
&lt;br /&gt;
The VDI Plugin has no connection to the PBX. Signaling is still done at the terminal server by the myApps client.&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Citrix Workspace app must first be installed on all platforms. This is necessary because the myApps plugin must copy a .dll (Windows) / .so (MacOS/Linux) into the Citrix installation directory.&amp;lt;br&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Windows ===&lt;br /&gt;
&lt;br /&gt;
The myApps Plugin .msi must be installed or deployed at the Thin-Client and does not require any configuration.&lt;br /&gt;
&lt;br /&gt;
=== MacOS ===&lt;br /&gt;
&lt;br /&gt;
Install the myAppsPlugin.dmg or .pkg at the Thin-Client and does not require any configuration.&lt;br /&gt;
&lt;br /&gt;
=== Linux ===&lt;br /&gt;
&lt;br /&gt;
Update your Linux PC first:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;sudo apt-get update&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Download latest Citrix Workspace App (Mar 7, 2024) for Debian and x86_64 platform: &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;https://www.citrix.com/downloads/workspace-app/linux/workspace-app-for-linux-latest.html&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Citrix Workspace app needs &#039;&#039;&#039;libwebkit2gtk-4.0-37&#039;&#039;&#039; packet and this packet is not available in Ubuntu-24.04 version.&lt;br /&gt;
&lt;br /&gt;
Install it at your Linux PC:&lt;br /&gt;
&lt;br /&gt;
https://docs.citrix.com/en-us/citrix-workspace-app-for-linux/install.html&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;sudo apt install -f ./icaclient_&amp;lt;version&amp;gt;._amd64.deb&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Install (or update) now the myApps Plugin:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;sudo apt install -f ./myAppsPlugin.deb&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Headset Buttons:&lt;br /&gt;
&lt;br /&gt;
*Jabra: Create a file sudo &amp;lt;your-favorite-text-editor&amp;gt; /etc/udev/rules.d/50-udev-java.rules&lt;br /&gt;
**Add &amp;lt;code&amp;gt;ATTRS{idVendor}==&amp;quot;0b0e&amp;quot;, MODE=&amp;quot;0666&amp;quot;, GROUP=&amp;quot;users&amp;quot;&amp;lt;/code&amp;gt; as content. After creating the udev file (as root), reload the udev rules using: &amp;lt;code&amp;gt;sudo udevadm control --reload&amp;lt;/code&amp;gt;&lt;br /&gt;
*Epos: Create a file sudo &amp;lt;your-favorite-text-editor&amp;gt; /etc/udev/rules.d/50-udev-epos.rules&lt;br /&gt;
** Add &amp;lt;code&amp;gt;ATTRS{idVendor}==&amp;quot;1395&amp;quot;, MODE=&amp;quot;0666&amp;quot;, GROUP=&amp;quot;users&amp;quot;&amp;lt;/code&amp;gt; as content. After creating the udev file (as root), reload the udev rules using: &amp;lt;code&amp;gt;sudo udevadm control --reload&amp;lt;/code&amp;gt; &lt;br /&gt;
*Plantronics: Create a file sudo &amp;lt;your-favorite-text-editor&amp;gt; /etc/udev/rules.d/50-udev-plantronics.rules&lt;br /&gt;
** Add &amp;lt;code&amp;gt;ATTRS{idVendor}==&amp;quot;047f&amp;quot;, MODE=&amp;quot;0666&amp;quot;, GROUP=&amp;quot;users&amp;quot;&amp;lt;/code&amp;gt; as content. After creating the udev file (as root), reload the udev rules using: &amp;lt;code&amp;gt;sudo udevadm control --reload&amp;lt;/code&amp;gt; &lt;br /&gt;
* Snom: Create a file sudo &amp;lt;your-favorite-text-editor&amp;gt; /etc/udev/rules.d/50-udev-snom.rules&lt;br /&gt;
** Add &amp;lt;code&amp;gt;ATTRS{idVendor}==&amp;quot;251c&amp;quot;, MODE=&amp;quot;0666&amp;quot;, GROUP=&amp;quot;users&amp;quot;&amp;lt;/code&amp;gt; as content. After creating the udev file (as root), reload the udev rules using: &amp;lt;code&amp;gt;sudo udevadm control --reload&amp;lt;/code&amp;gt; &lt;br /&gt;
*  Yealink: Create a file sudo &amp;lt;your-favorite-text-editor&amp;gt; /etc/udev/rules.d/50-udev-yealink.rules&lt;br /&gt;
** Add &amp;lt;code&amp;gt;ATTRS{idVendor}==&amp;quot;6993&amp;quot;, MODE=&amp;quot;0666&amp;quot;, GROUP=&amp;quot;users&amp;quot;&amp;lt;/code&amp;gt; as content. After creating the udev file (as root), reload the udev rules using: &amp;lt;code&amp;gt;sudo udevadm control --reload&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
No additional configuration required.&lt;br /&gt;
&lt;br /&gt;
=== Configuration on the Terminalserver ===&lt;br /&gt;
The Softphone App at the terminal server does not require any additional configuration.&lt;br /&gt;
&lt;br /&gt;
== How it works ==&lt;br /&gt;
&lt;br /&gt;
User starts the VDI software (Citrix Workspace App or Windows Remotedesktop) needed to connect to a remote server. &lt;br /&gt;
&lt;br /&gt;
This software automatically starts the myApps Plugin. No user action required.&lt;br /&gt;
&lt;br /&gt;
The user starts myApps at the server for the Softphone App. myApps discovers that it is running in terminal server environment and will connect to the plugin which was already started by the VDI software.&lt;br /&gt;
&lt;br /&gt;
The user does not need to have any knowledge about the myApps Plugin.&lt;br /&gt;
&lt;br /&gt;
== Licensing ==&lt;br /&gt;
&lt;br /&gt;
== Known issues ==&lt;br /&gt;
* Webcam and remote videos must be rendered over the Softphone App but for the time being a native window is opened at the terminal client (only for the Windows Plugin)&lt;br /&gt;
&lt;br /&gt;
* Connecting to a conference or 3rd party conference does not transmit video as video starts in the Javascript code of the Softphone App and Javascript has no access to the local webcam at the remote server. &lt;br /&gt;
**Video is displayed but with delay due to the rendering process. &lt;br /&gt;
**Citrix may provide access to the local webcam internally and the webcam may be available but remote peer will probably experience delay of the received video.&lt;br /&gt;
* When MyApps is used as a Citrix Published App, notification pop-ups cannot be displayed. This is because Citrix does not recognize the notifications as part of MyApps and therefore does not show them as part of the published app. If the full desktop is used in Citrix, the notifications function correctly.&lt;br /&gt;
* Start of AppSharing remains at the terminal server but the transmission of the media now starts at the local client.&lt;br /&gt;
&amp;lt;br/&amp;gt;We need to implement an exception for appSharing in the future as the transmission must happen at the server.&lt;br /&gt;
&amp;lt;br/&amp;gt;For the time being the appSharing is transmitted to the client and forwarded to the remote peer adding some delay due to this tranmission between server and client (only for the Windows Plugin)&lt;br /&gt;
&lt;br /&gt;
==Troubleshooting==&lt;br /&gt;
If the problem still exists after trying the OS-specific hints below, open a support ticket and send a trace from the myApps client (remote) with App and Browser option. Please send also all myAppsPlugin-x.txt and myAppsRemote-x.txt trace files from the myApps-plugin on the local PC.&lt;br /&gt;
&lt;br /&gt;
=== Troubleshooting Windows ===&lt;br /&gt;
&lt;br /&gt;
If Citrix is used as a terminal server environment:&lt;br /&gt;
&lt;br /&gt;
1) Citrix must be installed &#039;&#039;&#039;BEFORE&#039;&#039;&#039; the plugin&lt;br /&gt;
&lt;br /&gt;
2) Check in &amp;quot;C:/program files/Citrix/ICA Client&amp;quot; folder, there is the .dll myAppscitrixremoteserviesvc.dll&lt;br /&gt;
&lt;br /&gt;
3) Check in the registry, that: Computer\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Citrix\ICA Client\Engine\Configuration\Advanced\Modules\ICA 3.0 is there. &lt;br /&gt;
&lt;br /&gt;
&amp;quot;VirtualDriverEx&amp;quot; must be there with the value: InnovaphoneCitrixPlugin&lt;br /&gt;
&lt;br /&gt;
4) In Computer\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Citrix\ICA Client\Engine\Configuration\Advanced\Modules\InnovaphoneCitrixPlugin as Drivename and DrivenameWin32 you should find the .dll as value and as innovaphone path the path of the plugin for the file myAppsplugin&lt;br /&gt;
&lt;br /&gt;
Dump files are in the trace folder c:\users\$user\Appdata\local\innovaphone\myAppsPlugin if client crash at start.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Remote desktop (Windows)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
After installing the plugin, check this registry folder:&lt;br /&gt;
&lt;br /&gt;
Computer\HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Default\AddIns\innovaphoneRemoteServicesSvc64&lt;br /&gt;
&lt;br /&gt;
and check as &amp;quot;Name&amp;quot; the path of the .dll &amp;lt;--- c:\program files(x86)\iinnovaphone\myAppsPlugin\myAppsRemoteServiceSvc64.dll&lt;br /&gt;
&lt;br /&gt;
check that the .dll exist in the mentioned direcotry and the plugin.&lt;br /&gt;
&lt;br /&gt;
=== Troubleshooting Linux ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;​Citrix Workspace App must be installed before the myAppsPlugin&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Innovaphone Plugin is installed under /opt/innovaphone/&#039;&#039;&#039;myAppsPlugin&#039;&#039;&#039; and in /opt/Citrix/ICAClient/&#039;&#039;&#039;myAppsCitrixPlugin.so&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
myAppsCitrixPlugin.so library is called by the Citrix Workspace App and this library opens the myAppsPlugin.&lt;br /&gt;
&lt;br /&gt;
There is a file in the Citrix installation called module.ini (/opt/Citrix/ICAClient/config/module.ini). ​Inside this file the myApps Citrix Plugin library is included:​&lt;br /&gt;
&lt;br /&gt;
- ​VirtualDriver entry must contain myAppsCitrixPlugin&lt;br /&gt;
&lt;br /&gt;
- a line with &#039;&#039;&#039;​myAppsCitrixPlugin=On&#039;&#039;&#039;​ must exist and &lt;br /&gt;
&lt;br /&gt;
Following directory &#039;&#039;&#039;/var/log/apps/myAppsPlugin/&#039;&#039;&#039; must also exist for the log files with write permission for everyone (drwxrwxrwx)&lt;br /&gt;
&lt;br /&gt;
=== Troubleshooting MacOS ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;​Citrix Workspace App must be installed before the myAppsPlugin&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In /Library/Application Support/Citrix/PlugIns&lt;br /&gt;
&lt;br /&gt;
must exist ​myAppsCitrixPlugin.plugin -&amp;gt; /Application/myappsPlugin.app/Contents/PlugIns/myapps_citrix_plugin.plugin&lt;br /&gt;
&lt;br /&gt;
​under:​&lt;br /&gt;
&lt;br /&gt;
​/Users/.../Library/Application Support/Citrix Receiver&lt;br /&gt;
&lt;br /&gt;
​​there is a file called Modules. ​Inside this file the myApps Plugin is included:​&lt;br /&gt;
&lt;br /&gt;
- ​VirtualDriver entry must contain myAppsCitrixPlugin&lt;br /&gt;
&lt;br /&gt;
- a line with myAppsCitrixPlugin=On must exist&lt;br /&gt;
&lt;br /&gt;
- and another line with [myAppsCitrixPlugin]  too&lt;br /&gt;
&lt;br /&gt;
​both things are done during the installation. In case something is not working must check that the link to the plugin exists and that the modules file contains these entries.&lt;br /&gt;
&lt;br /&gt;
​​And under /Users/.../Library/Containers/com.innovaphone.myapps-plugin-14r2/Data/Documents a log file is created: myAppsPlugin.txt&lt;br /&gt;
&lt;br /&gt;
=== Troubleshooting Citrix ===&lt;br /&gt;
A Virtual Channel Policy must be added to the Registry at the &#039;&#039;&#039;Citrix Server&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Create &#039;&#039;&#039;VCPolicies&#039;&#039;&#039; folder under &#039;&#039;&#039;HKLM/Software/Policies/Citrix&#039;&#039;&#039; if it does not exist.&lt;br /&gt;
&lt;br /&gt;
Create &#039;&#039;&#039;VCPolicies&#039;&#039;&#039; folder under &#039;&#039;&#039;HKLM/Software/WOW6432Node/Policies/Citrix&#039;&#039;&#039; if it does not exist.&lt;br /&gt;
&lt;br /&gt;
Create a REG_MULTI_SZ entry with the name &#039;&#039;&#039;VirtualChannelWhiteList&#039;&#039;&#039;. This entry must contain as value: &#039;&#039;&#039;INNOHDX,C:\Program Files (x86)\innovaphone\myApps\myApps.exe&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Related Articles ==&lt;br /&gt;
&lt;br /&gt;
* https://wiki.innovaphone.com/index.php?title=Reference14r2:Concept_myApps&lt;br /&gt;
* https://wiki.innovaphone.com/index.php?title=Reference14r2:Concept_App_SoftphoneApp&lt;/div&gt;</summary>
		<author><name>Nfi</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Reference15r1:Apps/PbxManager/App_Fax&amp;diff=76566</id>
		<title>Reference15r1:Apps/PbxManager/App Fax</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Reference15r1:Apps/PbxManager/App_Fax&amp;diff=76566"/>
		<updated>2025-05-06T08:14:14Z</updated>

		<summary type="html">&lt;p&gt;Nfi: /* SMTP configuration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- Keywords: faxserver faxtomail fax2mail --&amp;gt;&lt;br /&gt;
This page describes the PBX Settings Plugin of the Fax App.&lt;br /&gt;
&lt;br /&gt;
The fax app service can be configured and user apps can be added, configured or deleted with this PBX Settings Plugin of the fax app. The app service provides user fax apps:&lt;br /&gt;
* with a personal account.&lt;br /&gt;
* with a group account.&lt;br /&gt;
&lt;br /&gt;
The fax service applies the fax configuration like subscriber name of a fax object for fax calls to and from this fax object. Therefore each fax object must have access to a fax interface resource to send and receive fax calls. A fax interface should be registered to the first app object; further app objects can also use this fax interface if the first app object is configured as external resource in these app objects.&lt;br /&gt;
&lt;br /&gt;
== App Service Configuration ==&lt;br /&gt;
=== Change configuration ===&lt;br /&gt;
* &#039;&#039;&#039;Delete fax jobs automatically&#039;&#039;&#039;: Fax jobs of all users with a certain age in days can be automatically deleted by the system if configured.&lt;br /&gt;
* &#039;&#039;&#039;Send with high resolution&#039;&#039;&#039;: The fax service tries to send with 400dpi if this is enabled. If the destination party does not support the high quality, the outgoing document is created again with a 200dpi resolution and the call is retried.&lt;br /&gt;
&lt;br /&gt;
=== Default settings for mail notifications ===&lt;br /&gt;
* &#039;&#039;&#039;Incoming notification&#039;&#039;&#039;: generate email on incoming fax&lt;br /&gt;
* &#039;&#039;&#039;Forwarding as PDF&#039;&#039;&#039;: forward received fax as PDF attachment&lt;br /&gt;
* &#039;&#039;&#039;Transmission confirmation&#039;&#039;&#039;: generate email on fax transmission&lt;br /&gt;
* &#039;&#039;&#039;Transmission report as PDF&#039;&#039;&#039;: generate email with send report as PDF attachment&lt;br /&gt;
* &#039;&#039;&#039;Error notification&#039;&#039;&#039;: generate email on errorneous fax transmission&lt;br /&gt;
* &#039;&#039;&#039;Language&#039;&#039;&#039;: set email language. Supported values are ba, ca, cs, da, de, en, es, et, eu, fi, fr, hr, hu, it, lv, mk, nl, no, pl, pt, ro, rs, si, sv, th, tr; non-supported values are replaced by en.&lt;br /&gt;
* &#039;&#039;&#039;Timezone&#039;&#039;&#039;: set email timezone according to [https://www.iana.org/time-zones IANA definitions]. For a better overview you may refer to [https://www.iplocate.com/de/resources/timezones/list-of-timezones this page].&lt;br /&gt;
Pre-set default for language and timezone are the administrator values.&lt;br /&gt;
&lt;br /&gt;
=== SMTP server configuration ===&lt;br /&gt;
The email receiving for the Mail2Fax feature can be enabled and the authentication configured here:&lt;br /&gt;
* &#039;&#039;&#039;E-mail reception&#039;&#039;&#039;: To be turned on.&lt;br /&gt;
* &#039;&#039;&#039;Domain&#039;&#039;&#039;: Used to filter the recipient address of the received mails&#039; address list. If not set, the configured app domain of the app service is used.&lt;br /&gt;
* &#039;&#039;&#039;User name&#039;&#039;&#039;: The login name for the SMTP authentication.&lt;br /&gt;
* &#039;&#039;&#039;Password&#039;&#039;&#039;: The password for the SMTP authentication.&lt;br /&gt;
&lt;br /&gt;
=== SMTP configuration ===&lt;br /&gt;
Required data for outgoing emails:&lt;br /&gt;
* &#039;&#039;&#039;Host name&#039;&#039;&#039;: Resolvable DNS name or an [https://datatracker.ietf.org/doc/html/rfc2821#section-4.1.3 IP address literal] of your app platform with the SMTP client (e.g. [123.255.37.2]). If the SMTP server (e.g. public SMTP server) is connected through a NAT router, a DNS name or an IP address is to be used which resolves to the NAT router&#039;s public IP.&lt;br /&gt;
* &#039;&#039;&#039;Server[:port]&#039;&#039;&#039;: Resolvable DNS name or an IP address of the used SMTP server plus optional port separated by &#039;:&#039;.&lt;br /&gt;
* &#039;&#039;&#039;User name&#039;&#039;&#039;: The login name of a valid user account at the SMTP server (recommended).&lt;br /&gt;
* &#039;&#039;&#039;Password&#039;&#039;&#039;: The password of the SMTP user account (recommended).&lt;br /&gt;
* &#039;&#039;&#039;Sender address&#039;&#039;&#039;: The email address of the sender in sent emails.&lt;br /&gt;
* &#039;&#039;&#039;Sender name&#039;&#039;&#039;: The name of the sender in sent emails.&lt;br /&gt;
[https://sdk.innovaphone.com/13r2/sdk/common/interface/smtp.htm#Example Values according to SMTP integration]&lt;br /&gt;
&lt;br /&gt;
=== HTTP API ===&lt;br /&gt;
* &#039;&#039;&#039;Key&#039;&#039;&#039;: key for HTTP post command authentication. For details, refer to the [[{{NAMESPACE}}:Concept_App_Service_Fax#App_API|API concept]].&lt;br /&gt;
&lt;br /&gt;
=== Customized texts ===&lt;br /&gt;
Options for text modifications of sent emails:&lt;br /&gt;
* For incoming documents&lt;br /&gt;
* For successfully sent documents&lt;br /&gt;
* For transmission errors&lt;br /&gt;
&lt;br /&gt;
The email body is supposed to be a HTML-formatted text generated by e.g. an email program. The mail subject is plain text. Following placeholders can be used both within the subject and the body:&lt;br /&gt;
* $1: The long name of PBX user&lt;br /&gt;
* $2: The remote (contact) name, the remote number or anonymous&lt;br /&gt;
* $3: The remote number&lt;br /&gt;
* $4: The page count&lt;br /&gt;
* $5: The call count (only within the error mail)&lt;br /&gt;
* $6: The error cause (only within the error mail)&lt;br /&gt;
* $7: The error description (only within the error mail)&lt;br /&gt;
&lt;br /&gt;
===== HTML email body example for a transmission confirmation email =====&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
  &amp;lt;html lang=&amp;quot;en&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;head&amp;gt;&lt;br /&gt;
      &amp;lt;meta charset=&amp;quot;utf-8&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1.0;&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/head&amp;gt;&lt;br /&gt;
    &amp;lt;body&amp;gt;&lt;br /&gt;
      &amp;lt;&amp;lt;nowiki&amp;gt;h1&amp;gt;Fax: Transmission successful&amp;lt;/h1&amp;gt;&lt;br /&gt;
     &amp;lt;p&amp;gt;Fax was successfully transmitted&amp;lt;/p&amp;gt;&lt;br /&gt;
     &amp;lt;p&amp;gt;Name of sender: $1&amp;lt;/p&amp;gt;&lt;br /&gt;
     &amp;lt;p&amp;gt;Name of recipent: $2&amp;lt;/p&amp;gt;&lt;br /&gt;
     &amp;lt;p&amp;gt;Number of recipent: $3&amp;lt;/p&amp;gt;&lt;br /&gt;
     &amp;lt;p&amp;gt;Sent pages: $4&amp;lt;&amp;lt;/nowiki&amp;gt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;/body&amp;gt;&lt;br /&gt;
  &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Mail background logo ===&lt;br /&gt;
* &#039;&#039;&#039;Include picture&#039;&#039;&#039;: add myApps background logo in all HTML mail bodies&lt;br /&gt;
* &#039;&#039;&#039;Custom picture&#039;&#039;&#039;: Base64-encoded data-image for customized background logo&lt;br /&gt;
&lt;br /&gt;
== Individual Fax App Configuration ==&lt;br /&gt;
Following items can be configured in a PBX Fax object (including fax group objects):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Name&#039;&#039;&#039;: Object long name&lt;br /&gt;
* &#039;&#039;&#039;SIP&#039;&#039;&#039;: Object name. Allowed characters according to the [[{{NAMESPACE}}:PBX/Objects#General_Object_Properties|general object properties]]. Using unallowed characters, e.g. spaces, can result in an unexpected behavior of the app, e.g. the badge counts do not work.&lt;br /&gt;
* &#039;&#039;&#039;Number&#039;&#039;&#039;: Object number to be prepended for fax calls.&lt;br /&gt;
* &#039;&#039;&#039;International fax number&#039;&#039;&#039;: Printed in the headline of fax document. The user (send) number is added, but not the node number.&lt;br /&gt;
* &#039;&#039;&#039;Company name&#039;&#039;&#039;: Printed in the headline of fax document.&lt;br /&gt;
* Email addresses: The email addresses of the PBX object. They can be used for email notifications of the app service.&lt;br /&gt;
=== FAX interface ===&lt;br /&gt;
Selection of [[Howto:How_to_implement_large_PBXs#Technical_data_and_recommended_number_of_users_supported|fax-capable devices]] available in the system. For the interface search, the user needs access to the DevicesApi app.&lt;br /&gt;
* &#039;&#039;&#039;Device name&#039;&#039;&#039;: Name of the device as defined in the Devices App&lt;br /&gt;
* &#039;&#039;&#039;Hardware ID&#039;&#039;&#039;: Serial number (MAC) of a device&lt;br /&gt;
* &#039;&#039;&#039;Product&#039;&#039;&#039;: innovaphone device model&lt;br /&gt;
* &#039;&#039;&#039;Available channels&#039;&#039;&#039;: Amount of offered fax channels&lt;br /&gt;
* &#039;&#039;&#039;T.38 allowed&#039;&#039;&#039;: T.38 codec for the fax transmission allowed&lt;br /&gt;
* &#039;&#039;&#039;Audio fax allowed&#039;&#039;&#039;: Audio codecs (G.711) for the fax transmission allowed. Availability depends on the device type. Two DSP channels are needed for each used fax channel.&lt;br /&gt;
=== External resource ===&lt;br /&gt;
The H.323 name of another reachable PBX Fax-object as call destination, which provides a registration to an innovaphone FAX interface endpoint. &lt;br /&gt;
* For fax objects: This is only used if no fax interface is registered.&lt;br /&gt;
* For group fax objects: This is a &#039;&#039;&#039;mandatory&#039;&#039;&#039; option, and a fax object can be selected. You can also select another group fax object (which has selected a working fax object).&lt;br /&gt;
=== Node and PBX ===&lt;br /&gt;
The PBX and node configuration of the PBX object. Node numbers are considered for the calling party numbers.&lt;br /&gt;
=== Default Recipient ===&lt;br /&gt;
Faxes are received for this user or this fax group. If no personal fax number is appended, the number is not assigned or the assigned user has no fax license.&lt;br /&gt;
=== Header of fax pages ===&lt;br /&gt;
A header line preset for a language can be selected or the header line can be individually modified. Usable variables are listed [[{{NAMESPACE}}:Gateway/Interfaces#Headline|here]].&lt;br /&gt;
=== Configuration Templates ===&lt;br /&gt;
Select configuration templates to be applied for the fax app object&lt;/div&gt;</summary>
		<author><name>Nfi</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Howto:Community_Platform&amp;diff=74847</id>
		<title>Howto:Community Platform</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Howto:Community_Platform&amp;diff=74847"/>
		<updated>2025-01-20T11:17:38Z</updated>

		<summary type="html">&lt;p&gt;Nfi: /* Which official channels are used? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==What is the Community Platform==&lt;br /&gt;
We operate our own platform for all community activities at: https://community.innovaphone.com/&lt;br /&gt;
&lt;br /&gt;
On the one hand, many functions are made available there for demo purposes, and on the other hand, we use the [https://community.innovaphone.com/PBX0/APPCLIENT/1410520/appclient.htm?app=connect Connect App] to stay in contact with partners and end customers, receive feedback and offer a platform for discussion and exchange.&lt;br /&gt;
&lt;br /&gt;
==More Information==&lt;br /&gt;
===How can I get an account?===&lt;br /&gt;
Anyone can register an account [https://community.innovaphone.com/ here].&lt;br /&gt;
&lt;br /&gt;
===What content is this platform used for?===&lt;br /&gt;
We will bring together our various services on this platform.&lt;br /&gt;
&lt;br /&gt;
We currently use the community platform for the following services:&lt;br /&gt;
* Beta programs for new software versions&lt;br /&gt;
* Information on technical information, alerts and new releases (additionally to Twitter/X &amp;quot;innovaphone Tech&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
=== Which official channels are used? ===&lt;br /&gt;
; XX Beta&lt;br /&gt;
: You will find a suitable channel for every official beta program. Example &#039;&#039;14r1 Beta&#039;&#039; or &#039;&#039;14r2 Beta&#039;&#039;&lt;br /&gt;
; Tech-News&lt;br /&gt;
: Information on releases, new products, new wiki articles, and more&lt;br /&gt;
;Tech-Discussions&lt;br /&gt;
: Discussions about all technical related topics&lt;br /&gt;
;Training-Discussions&lt;br /&gt;
: Discussions about all training related topics&lt;br /&gt;
;Sales-Discussions&lt;br /&gt;
: Discussions about all sales related topics&lt;br /&gt;
;SDK-Discussions&lt;br /&gt;
: Discussions about all innovaphone Apps SDK related topics&lt;br /&gt;
;Ideas&lt;br /&gt;
: Suggestions related to upcoming versions&lt;br /&gt;
;Activités en France (Activities in France)&lt;br /&gt;
: Find all the communication about the different innovaphone activities in France&lt;br /&gt;
&lt;br /&gt;
=== For a better overview - first line in the first post ===&lt;br /&gt;
To identify the topic of a post more quickly, we recommend the following procedure.&lt;br /&gt;
&lt;br /&gt;
The first line of a new post should contain all relevant points.&lt;br /&gt;
&lt;br /&gt;
This could look like this, for example:&lt;br /&gt;
&lt;br /&gt;
Area e.g. #idea&lt;br /&gt;
&lt;br /&gt;
Product e.g. #recordings&lt;br /&gt;
&lt;br /&gt;
Topic e.g. second datastore&lt;br /&gt;
 &#039;&#039;&#039;#idea #recordings second datastore&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== How to add and use a Channel? ===&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 1. Go to &amp;quot;Channels&amp;quot;&amp;lt;br&amp;gt;2. Click on a channel&amp;lt;br&amp;gt; [[File:Channels.png|frameless|channels.png/]] || &amp;amp;nbsp; &amp;amp;nbsp; || 1. Click on the three dots&amp;lt;br&amp;gt; 2. Click &amp;quot;Pin channel&amp;quot;&amp;lt;br&amp;gt; [[File:Pin.png|frameless|pin.png/]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
After that, you find the Channel in your &amp;quot;Home&amp;quot; and can read/post on this Channel easily. If you would like to be actively informed about new posts, you can also use the &amp;quot;&amp;quot;Follow function (under the Pin channel)&lt;br /&gt;
&lt;br /&gt;
=== How can I be actively notified about new content? ===&lt;br /&gt;
You can be notified about new &amp;quot;followed content&amp;quot; in the Connect App via push on your smartphone and/or browser, or by e-mail. To do this, you can simply use the standard function in the Connect App.&lt;br /&gt;
&lt;br /&gt;
[[Category:Howto|{{PAGENAME}}]]&lt;/div&gt;</summary>
		<author><name>Nfi</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Reference13r1:Concept_App_Service_Yealink&amp;diff=74521</id>
		<title>Reference13r1:Concept App Service Yealink</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Reference13r1:Concept_App_Service_Yealink&amp;diff=74521"/>
		<updated>2024-12-18T18:33:32Z</updated>

		<summary type="html">&lt;p&gt;Nfi: /* Configuration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Concept|Apps]]&lt;br /&gt;
The Provisioning App for Yealink is an App Service which can be installed on an innovaphone App Platform and is used to easily provision Yealink SIP devices with myApps. This enables the user to easily set up a Yealink SIP device via his profile. &#039;&#039;The administrator also has the possibility to set up a Yealink SIP device for a user via UsersAdmin.&#039;&#039;&lt;br /&gt;
When a Yealink phone is provisioned on Profile &#039;&#039;or UsersAdmin&#039;&#039;, the Yealink App connects to the Yealink Redirect To Provisioning Server (RPS) and redirects the phone to the Yealink App on the customer App Platform, where the config files will be requested afterwards. These config files are generated on the Yealink App with user data received from Users and device configuration data received from Devices.&lt;br /&gt;
== Applies To == &lt;br /&gt;
&lt;br /&gt;
* innovaphone PBX from version 13r1sr18&lt;br /&gt;
&lt;br /&gt;
==Requirements==&lt;br /&gt;
* innovaphone PBX&lt;br /&gt;
* innovaphone Application Platform&lt;br /&gt;
* Firmware V13r1xx&lt;br /&gt;
* Devices App&lt;br /&gt;
* Profile App&lt;br /&gt;
* Users Admin App&lt;br /&gt;
* MAC address of the Yealink Device (usually on the back of the device)&lt;br /&gt;
&lt;br /&gt;
== Apps ==&lt;br /&gt;
=== Yealink App (innovaphone-yealink) ===&lt;br /&gt;
[[Image: Yealink-App.png|yealink-app.png/|yealink-app.png/]]&lt;br /&gt;
This is an App, where the administrator can check the communication between the RPS and the Provisioning App.&lt;br /&gt;
&lt;br /&gt;
Also some config items can be edited on the hamburguer menu:&lt;br /&gt;
&lt;br /&gt;
* RPS account (We recommend that you use your own account. You will receive your own login credentials from your official Yealink distributor. &#039;&#039;&#039;The default login credentials should only be used for testing purposes.&#039;&#039;&#039;)&lt;br /&gt;
* Device provisioning account for configuration file access&lt;br /&gt;
* Interval for phone updates&lt;br /&gt;
* Timeserver and timezone&lt;br /&gt;
* Device Admin account credentials&lt;br /&gt;
* Media Relay option for the HW-ID&lt;br /&gt;
* SIP protocol (TCP or TLS)&lt;br /&gt;
* HTTP(S) protocol for provisioning access&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
;Websocket: to get the URL of the app, so the phones can be redirected&lt;br /&gt;
;Admin: to be able to edit the device on the User object&lt;br /&gt;
;Services: needed to use the Devices API (com.innovaphone.devices), so the phone configuration can be received&lt;br /&gt;
;Devices-API: gives access to the Devices App, which is needed for the provisioning of phones&lt;br /&gt;
&lt;br /&gt;
Parameters for Profile App Object:&lt;br /&gt;
&lt;br /&gt;
;Yealink: gives access to the Provisioning App, which is needed for the provisioning of phones&lt;br /&gt;
&lt;br /&gt;
== PBX Manager Plugins ==&lt;br /&gt;
&lt;br /&gt;
=== Yealink ===&lt;br /&gt;
&lt;br /&gt;
With the Yealink plugin App Objects can be created, edited and deleted on the PBX.&lt;br /&gt;
&lt;br /&gt;
==Configuration==&lt;br /&gt;
* Download the Provisioning App for Yealink via App Store.&lt;br /&gt;
* Install the App on the App Platform Manager.&lt;br /&gt;
* Create a instance for the Provisioning App for Yealink on the App Platform Manager.&lt;br /&gt;
* Create a new PBX Object with the PBX Manager Plugin.&lt;br /&gt;
* Assign App to authorized (admin) users, which will be allowed to open the Admin UI of the Provisioning App.&lt;br /&gt;
* Set access in the Profile App Object in the advanced UI to the Provisioning App for Yealink. This gives access to the Provisioning App for Yealink, which is needed for the provisioning of phones.&lt;br /&gt;
&lt;br /&gt;
[[File:RPS-account.png|alt=RPS account|thumb|rps-account.png/|rps-account.png/]]&lt;br /&gt;
Do not forget to check the default configuration on the hamburguer menu of the Provisioning App. There it is possible to set:&lt;br /&gt;
&lt;br /&gt;
* Your own RPS account (We recommend that you use your own account. You will receive your own login credentials from your official Yealink distributor. &#039;&#039;&#039;The default login credentials should only be used for testing purposes.&#039;&#039;&#039;)  &lt;br /&gt;
* Device provisioning account for configuration file access&lt;br /&gt;
&lt;br /&gt;
* The interval when the phone must ask  for updates&lt;br /&gt;
* The default device configuration parameters (only updated when then phone requests the configuration)&lt;br /&gt;
** NTP server&lt;br /&gt;
** Timezone&lt;br /&gt;
** Location&lt;br /&gt;
**Device Admin account credentials&lt;br /&gt;
** Media Relay (Set [[Reference13r2:PBX/Objects#Devices Config Flags|Media Relay Flag]] &#039;&#039;&#039;on the HW-ID of the PBX user object&#039;&#039;&#039; and disable ICE on the phone, &#039;&#039;&#039;DO NOT set media relay for the whole pbx!!!&#039;&#039;&#039;)&lt;br /&gt;
** TLS (To use SIP/TLS for registration, you have to put the root certificate (Yealink Equipment Issuing CA or Yealink Root CA) for devices from Yealink in the trust list of the Reverse Proxy and PBX. Please ask Yealink for this Yealink Equipment Issuing CA certificate or Yealink Root CA.)&lt;br /&gt;
** HTTPS (This defines if the Provisioning URL configured on the Phone must be HTTP or HTTPS)&lt;br /&gt;
&lt;br /&gt;
Also refer to [[Howto:Deploy Yealink Devices on myApps|this illustrated configuration document]] on how to deploy Yealink devices.&lt;br /&gt;
&lt;br /&gt;
==Provisioning workflow==&lt;br /&gt;
[[Image: Yealink workflow.jpg|thumb|upright=1.0|right|yealink_workflow.jpg/|yealink_workflow.jpg/]]&lt;br /&gt;
First of all, when the App starts running it &#039;&#039;&#039;publishes a Provisioning API&#039;&#039;&#039; (&#039;&#039;com.innovaphone.provisioning&#039;&#039;), so that the Profile App and Users Admin App will be able to find it as provider. For this Profile and Users Admin must be able to access the Provisioning App, which can be configured on each App Object on the PBX. This is also automatically configured on the PBX Manager when adding or editing a Provisioning App Object. The Provisioning App also registers its URL with a server name (which is usually the 24 first characters of the domain name) on the Yealink RPS everytime the app service starts, which will be used to redirect the devices afterwards.&lt;br /&gt;
&lt;br /&gt;
On &#039;&#039;&#039;Profile&#039;&#039;&#039; (or Users Admin) the provisioning of a new phone is started and it looks for the Provisioning APIs that have been published. The user must select which one is the right one for the given phone (in this case Yealink) because there could be more than one manufacturer. Afterwards, the provisioning categories and the provisioning code are requested to Devices and saved on the Users Service. Then the &#039;&#039;&#039;MAC address&#039;&#039;&#039; must be entered on Profile. This with the provisioning code (and also other user-related data like username) is sent from Users to the Provisioning App.&lt;br /&gt;
&lt;br /&gt;
Next the Provisioning App opens a &#039;&#039;&#039;Sysclient&#039;&#039;&#039; connection and when it is set Devices sends the configuration for the phone through the Sysclient connection. This connection remains opened and it is used to receive configuration updates. &lt;br /&gt;
&lt;br /&gt;
Finally the phone is redirected on the &#039;&#039;&#039;Yealink RPS&#039;&#039;&#039;, which will redirect the phone to the Provisioning App when it requests for the configuration. This can be triggered it by doing a Factory Reset. The phone requests the configuration by sending a GET request to the app, which will be answered with the &#039;&#039;&#039;configuration file&#039;&#039;&#039;. If an &#039;&#039;&#039;update timeout&#039;&#039;&#039; has been defined on the Yealink App, the phone will keep requesting for a new configuration file periodically to the Provisioning App. After the configuration file has been sent, the &#039;&#039;&#039;device&#039;&#039;&#039; on the user object is edited to update the Media Relay, TLS only and Reverse Proxy flags.&lt;br /&gt;
&lt;br /&gt;
==How to provision a device==&lt;br /&gt;
Yealink devices can be added by provisioning a new phone but selecting Yealink instead of innovaphone as the manufacturer. From a user point of view this should work as follows:&lt;br /&gt;
* Open myApps/Profile/My phones and select &amp;quot;&#039;&#039;&#039;+ Phone&#039;&#039;&#039;&amp;quot; to add a new device&lt;br /&gt;
* Then choose the manufacturer of the phone, in this case &#039;&#039;&#039;Yealink&#039;&#039;&#039;&lt;br /&gt;
* A drop down is displayed to select a &#039;&#039;&#039;category&#039;&#039;&#039;&lt;br /&gt;
* Enter the &#039;&#039;&#039;MAC&#039;&#039;&#039; address of the Yealink device (must be entered without &amp;quot;:&amp;quot; or &amp;quot;-&amp;quot;)&lt;br /&gt;
* Enter a &#039;&#039;&#039;name&#039;&#039;&#039; for this device, which will be the name of the app displayed on the home screen afterwards&lt;br /&gt;
* Unpacks the phone and connects it to the network (or do a factory reset on the device)&lt;br /&gt;
* The phone looks for the configuration and when it has finished the user should be able to make calls&lt;br /&gt;
&lt;br /&gt;
At the end:&lt;br /&gt;
* A new app must have been added to the home screen&lt;br /&gt;
* A new device must have been added to the user object (this can be checked on Users Admin or on the PBX)&lt;br /&gt;
* A new entry for the given device must have been added on the Devices tab of the Provisioning App&lt;br /&gt;
* The device must have been added to the Devices App&lt;br /&gt;
&lt;br /&gt;
==User interface==&lt;br /&gt;
[[Image: Yealink RPS history.jpg|thumb|upright=1.0|right|yealink_rps_history.jpg/|yealink_rps_history.jpg/]]&lt;br /&gt;
[[Image: Yealink Devices.jpg|thumb|upright=1.0|right|yealink_devices.jpg/|yealink_devices.jpg/]]&lt;br /&gt;
In the user interface of the administrator app there are 2 tabs: RPS history and Devices.&lt;br /&gt;
&lt;br /&gt;
On the &#039;&#039;&#039;RPS history&#039;&#039;&#039; tab, the history of the comunication between the app and the Yealink RPS can be seen. Here the commands sent from the app to the Yealink RPS with their answers are displayed. To be considered:&lt;br /&gt;
* Everytime the app starts, an &#039;&#039;&#039;ADD SERVER&#039;&#039;&#039; command is sent to register the URL of the app to the server name. After the first start of the app, this command will be always answered with &#039;&#039;&#039;Error: The server name has been used&#039;&#039;&#039; because the URL was already registered the first time.&lt;br /&gt;
* Every time a phone is provisioned, first a &#039;&#039;&#039;DEREGISTER DEVICE&#039;&#039;&#039; command is sent to remove it from the RPS if the phone has already been provisioned before. Then a &#039;&#039;&#039;REDIRECT DEVICE&#039;&#039;&#039; command is sent to redirect the config requests from the phone to the app. If the phone has not already been provisioned before, the first command will be answered with &#039;&#039;&#039;Error: Invalid MAC(s)&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
On the &#039;&#039;&#039;Devices&#039;&#039;&#039; tab, the list of all the devices provisioned by the app and their status are displayed. To be considered:&lt;br /&gt;
* If a phone is not on the list, the device data has not been received by the app.&lt;br /&gt;
* If the value of the &#039;&#039;&#039;Device Config&#039;&#039;&#039; column is not &#039;&#039;&#039;Config Received&#039;&#039;&#039;, then the sysclient Connection between Devices App and the Provisioning App has not been set or the configuration has not been received.&lt;br /&gt;
* If the value of the &#039;&#039;&#039;Phone Requests&#039;&#039;&#039; column is not &#039;&#039;&#039;Provisioned&#039;&#039;&#039;, that means that the phone has still not requested the config file to the app. In this case, a Factory Reset should be done on the phone.&lt;br /&gt;
* On the &#039;&#039;&#039;Last Config Request&#039;&#039;&#039; column, the timestamp of the last config request done by the phone is displayed.&lt;br /&gt;
&lt;br /&gt;
==Known issues==&lt;br /&gt;
[[Image: Yealink trusted certificates.jpg|thumb|upright=1.0|right|yealink_trusted_certificates.jpg/|yealink_trusted_certificates.jpg/]]&lt;br /&gt;
It the phone configuration has been received but after a factory reset no phone requests have been received, you may need to disable the security certificates in the Yealink phone web interface under Security&amp;gt;Trusted Certificates:&lt;br /&gt;
* Only Accept Trusted Certificates -&amp;gt; Disabled&lt;br /&gt;
* Common Name Validation -&amp;gt; Disabled&lt;br /&gt;
* CA Certificates -&amp;gt; All Certificates&lt;br /&gt;
&lt;br /&gt;
==Related Articles==&lt;br /&gt;
* [[Howto:Deploy Yealink Devices on myApps|Deploy Yealink Devices]]&lt;br /&gt;
* [[Howto:Yealink IP phones - Yealink - 3rd Party Product|Yealink Devices Compatibility]]&lt;br /&gt;
&lt;br /&gt;
* SDK Integration (if the content is available)&lt;/div&gt;</summary>
		<author><name>Nfi</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Reference13r1:Concept_App_Service_Yealink&amp;diff=74520</id>
		<title>Reference13r1:Concept App Service Yealink</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Reference13r1:Concept_App_Service_Yealink&amp;diff=74520"/>
		<updated>2024-12-18T18:31:33Z</updated>

		<summary type="html">&lt;p&gt;Nfi: /* Configuration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Concept|Apps]]&lt;br /&gt;
The Provisioning App for Yealink is an App Service which can be installed on an innovaphone App Platform and is used to easily provision Yealink SIP devices with myApps. This enables the user to easily set up a Yealink SIP device via his profile. &#039;&#039;The administrator also has the possibility to set up a Yealink SIP device for a user via UsersAdmin.&#039;&#039;&lt;br /&gt;
When a Yealink phone is provisioned on Profile &#039;&#039;or UsersAdmin&#039;&#039;, the Yealink App connects to the Yealink Redirect To Provisioning Server (RPS) and redirects the phone to the Yealink App on the customer App Platform, where the config files will be requested afterwards. These config files are generated on the Yealink App with user data received from Users and device configuration data received from Devices.&lt;br /&gt;
== Applies To == &lt;br /&gt;
&lt;br /&gt;
* innovaphone PBX from version 13r1sr18&lt;br /&gt;
&lt;br /&gt;
==Requirements==&lt;br /&gt;
* innovaphone PBX&lt;br /&gt;
* innovaphone Application Platform&lt;br /&gt;
* Firmware V13r1xx&lt;br /&gt;
* Devices App&lt;br /&gt;
* Profile App&lt;br /&gt;
* Users Admin App&lt;br /&gt;
* MAC address of the Yealink Device (usually on the back of the device)&lt;br /&gt;
&lt;br /&gt;
== Apps ==&lt;br /&gt;
=== Yealink App (innovaphone-yealink) ===&lt;br /&gt;
[[Image: Yealink-App.png|yealink-app.png/|yealink-app.png/]]&lt;br /&gt;
This is an App, where the administrator can check the communication between the RPS and the Provisioning App.&lt;br /&gt;
&lt;br /&gt;
Also some config items can be edited on the hamburguer menu:&lt;br /&gt;
&lt;br /&gt;
* RPS account (We recommend that you use your own account. You will receive your own login credentials from your official Yealink distributor. &#039;&#039;&#039;The default login credentials should only be used for testing purposes.&#039;&#039;&#039;)&lt;br /&gt;
* Device provisioning account for configuration file access&lt;br /&gt;
* Interval for phone updates&lt;br /&gt;
* Timeserver and timezone&lt;br /&gt;
* Device Admin account credentials&lt;br /&gt;
* Media Relay option for the HW-ID&lt;br /&gt;
* SIP protocol (TCP or TLS)&lt;br /&gt;
* HTTP(S) protocol for provisioning access&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
;Websocket: to get the URL of the app, so the phones can be redirected&lt;br /&gt;
;Admin: to be able to edit the device on the User object&lt;br /&gt;
;Services: needed to use the Devices API (com.innovaphone.devices), so the phone configuration can be received&lt;br /&gt;
;Devices-API: gives access to the Devices App, which is needed for the provisioning of phones&lt;br /&gt;
&lt;br /&gt;
Parameters for Profile App Object:&lt;br /&gt;
&lt;br /&gt;
;Yealink: gives access to the Provisioning App, which is needed for the provisioning of phones&lt;br /&gt;
&lt;br /&gt;
== PBX Manager Plugins ==&lt;br /&gt;
&lt;br /&gt;
=== Yealink ===&lt;br /&gt;
&lt;br /&gt;
With the Yealink plugin App Objects can be created, edited and deleted on the PBX.&lt;br /&gt;
&lt;br /&gt;
==Configuration==&lt;br /&gt;
* Download the Provisioning App for Yealink via App Store.&lt;br /&gt;
* Install the App on the App Platform Manager.&lt;br /&gt;
* Create a instance for the Provisioning App for Yealink on the App Platform Manager.&lt;br /&gt;
* Create a new PBX Object with the PBX Manager Plugin.&lt;br /&gt;
* Assign App to authorized (admin) users, which will be allowed to open the Admin UI of the Provisioning App.&lt;br /&gt;
* Set access in the Profile App Object in the advanced UI to the Provisioning App for Yealink. This gives access to the Provisioning App for Yealink, which is needed for the provisioning of phones.&lt;br /&gt;
&lt;br /&gt;
[[File:RPS-account.png|alt=RPS account|thumb|rps-account.png/|rps-account.png/]]&lt;br /&gt;
Do not forget to check the default configuration on the hamburguer menu of the Provisioning App. There it is possible to set:&lt;br /&gt;
&lt;br /&gt;
* Your own RPS account (We recommend that you use your own account. You will receive your own login credentials from your official Yealink distributor. &#039;&#039;&#039;The default login credentials should only be used for testing purposes.&#039;&#039;&#039;)  &lt;br /&gt;
&lt;br /&gt;
* The interval when the phone must ask  for updates&lt;br /&gt;
* The default device configuration parameters (only updated when then phone requests the configuration)&lt;br /&gt;
** NTP server&lt;br /&gt;
** Timezone&lt;br /&gt;
** Location&lt;br /&gt;
**&lt;br /&gt;
** Media Relay (Set [[Reference13r2:PBX/Objects#Devices Config Flags|Media Relay Flag]] &#039;&#039;&#039;on the HW-ID of the PBX user object&#039;&#039;&#039; and disable ICE on the phone, &#039;&#039;&#039;DO NOT set media relay for the whole pbx!!!&#039;&#039;&#039;)&lt;br /&gt;
** TLS (To use SIP/TLS for registration, you have to put the root certificate (Yealink Equipment Issuing CA or Yealink Root CA) for devices from Yealink in the trust list of the Reverse Proxy and PBX. Please ask Yealink for this Yealink Equipment Issuing CA certificate or Yealink Root CA.)&lt;br /&gt;
** HTTPS (This defines if the Provisioning URL configured on the Phone must be HTTP or HTTPS)&lt;br /&gt;
&lt;br /&gt;
Also refer to [[Howto:Deploy Yealink Devices on myApps|this illustrated configuration document]] on how to deploy Yealink devices.&lt;br /&gt;
&lt;br /&gt;
==Provisioning workflow==&lt;br /&gt;
[[Image: Yealink workflow.jpg|thumb|upright=1.0|right|yealink_workflow.jpg/|yealink_workflow.jpg/]]&lt;br /&gt;
First of all, when the App starts running it &#039;&#039;&#039;publishes a Provisioning API&#039;&#039;&#039; (&#039;&#039;com.innovaphone.provisioning&#039;&#039;), so that the Profile App and Users Admin App will be able to find it as provider. For this Profile and Users Admin must be able to access the Provisioning App, which can be configured on each App Object on the PBX. This is also automatically configured on the PBX Manager when adding or editing a Provisioning App Object. The Provisioning App also registers its URL with a server name (which is usually the 24 first characters of the domain name) on the Yealink RPS everytime the app service starts, which will be used to redirect the devices afterwards.&lt;br /&gt;
&lt;br /&gt;
On &#039;&#039;&#039;Profile&#039;&#039;&#039; (or Users Admin) the provisioning of a new phone is started and it looks for the Provisioning APIs that have been published. The user must select which one is the right one for the given phone (in this case Yealink) because there could be more than one manufacturer. Afterwards, the provisioning categories and the provisioning code are requested to Devices and saved on the Users Service. Then the &#039;&#039;&#039;MAC address&#039;&#039;&#039; must be entered on Profile. This with the provisioning code (and also other user-related data like username) is sent from Users to the Provisioning App.&lt;br /&gt;
&lt;br /&gt;
Next the Provisioning App opens a &#039;&#039;&#039;Sysclient&#039;&#039;&#039; connection and when it is set Devices sends the configuration for the phone through the Sysclient connection. This connection remains opened and it is used to receive configuration updates. &lt;br /&gt;
&lt;br /&gt;
Finally the phone is redirected on the &#039;&#039;&#039;Yealink RPS&#039;&#039;&#039;, which will redirect the phone to the Provisioning App when it requests for the configuration. This can be triggered it by doing a Factory Reset. The phone requests the configuration by sending a GET request to the app, which will be answered with the &#039;&#039;&#039;configuration file&#039;&#039;&#039;. If an &#039;&#039;&#039;update timeout&#039;&#039;&#039; has been defined on the Yealink App, the phone will keep requesting for a new configuration file periodically to the Provisioning App. After the configuration file has been sent, the &#039;&#039;&#039;device&#039;&#039;&#039; on the user object is edited to update the Media Relay, TLS only and Reverse Proxy flags.&lt;br /&gt;
&lt;br /&gt;
==How to provision a device==&lt;br /&gt;
Yealink devices can be added by provisioning a new phone but selecting Yealink instead of innovaphone as the manufacturer. From a user point of view this should work as follows:&lt;br /&gt;
* Open myApps/Profile/My phones and select &amp;quot;&#039;&#039;&#039;+ Phone&#039;&#039;&#039;&amp;quot; to add a new device&lt;br /&gt;
* Then choose the manufacturer of the phone, in this case &#039;&#039;&#039;Yealink&#039;&#039;&#039;&lt;br /&gt;
* A drop down is displayed to select a &#039;&#039;&#039;category&#039;&#039;&#039;&lt;br /&gt;
* Enter the &#039;&#039;&#039;MAC&#039;&#039;&#039; address of the Yealink device (must be entered without &amp;quot;:&amp;quot; or &amp;quot;-&amp;quot;)&lt;br /&gt;
* Enter a &#039;&#039;&#039;name&#039;&#039;&#039; for this device, which will be the name of the app displayed on the home screen afterwards&lt;br /&gt;
* Unpacks the phone and connects it to the network (or do a factory reset on the device)&lt;br /&gt;
* The phone looks for the configuration and when it has finished the user should be able to make calls&lt;br /&gt;
&lt;br /&gt;
At the end:&lt;br /&gt;
* A new app must have been added to the home screen&lt;br /&gt;
* A new device must have been added to the user object (this can be checked on Users Admin or on the PBX)&lt;br /&gt;
* A new entry for the given device must have been added on the Devices tab of the Provisioning App&lt;br /&gt;
* The device must have been added to the Devices App&lt;br /&gt;
&lt;br /&gt;
==User interface==&lt;br /&gt;
[[Image: Yealink RPS history.jpg|thumb|upright=1.0|right|yealink_rps_history.jpg/|yealink_rps_history.jpg/]]&lt;br /&gt;
[[Image: Yealink Devices.jpg|thumb|upright=1.0|right|yealink_devices.jpg/|yealink_devices.jpg/]]&lt;br /&gt;
In the user interface of the administrator app there are 2 tabs: RPS history and Devices.&lt;br /&gt;
&lt;br /&gt;
On the &#039;&#039;&#039;RPS history&#039;&#039;&#039; tab, the history of the comunication between the app and the Yealink RPS can be seen. Here the commands sent from the app to the Yealink RPS with their answers are displayed. To be considered:&lt;br /&gt;
* Everytime the app starts, an &#039;&#039;&#039;ADD SERVER&#039;&#039;&#039; command is sent to register the URL of the app to the server name. After the first start of the app, this command will be always answered with &#039;&#039;&#039;Error: The server name has been used&#039;&#039;&#039; because the URL was already registered the first time.&lt;br /&gt;
* Every time a phone is provisioned, first a &#039;&#039;&#039;DEREGISTER DEVICE&#039;&#039;&#039; command is sent to remove it from the RPS if the phone has already been provisioned before. Then a &#039;&#039;&#039;REDIRECT DEVICE&#039;&#039;&#039; command is sent to redirect the config requests from the phone to the app. If the phone has not already been provisioned before, the first command will be answered with &#039;&#039;&#039;Error: Invalid MAC(s)&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
On the &#039;&#039;&#039;Devices&#039;&#039;&#039; tab, the list of all the devices provisioned by the app and their status are displayed. To be considered:&lt;br /&gt;
* If a phone is not on the list, the device data has not been received by the app.&lt;br /&gt;
* If the value of the &#039;&#039;&#039;Device Config&#039;&#039;&#039; column is not &#039;&#039;&#039;Config Received&#039;&#039;&#039;, then the sysclient Connection between Devices App and the Provisioning App has not been set or the configuration has not been received.&lt;br /&gt;
* If the value of the &#039;&#039;&#039;Phone Requests&#039;&#039;&#039; column is not &#039;&#039;&#039;Provisioned&#039;&#039;&#039;, that means that the phone has still not requested the config file to the app. In this case, a Factory Reset should be done on the phone.&lt;br /&gt;
* On the &#039;&#039;&#039;Last Config Request&#039;&#039;&#039; column, the timestamp of the last config request done by the phone is displayed.&lt;br /&gt;
&lt;br /&gt;
==Known issues==&lt;br /&gt;
[[Image: Yealink trusted certificates.jpg|thumb|upright=1.0|right|yealink_trusted_certificates.jpg/|yealink_trusted_certificates.jpg/]]&lt;br /&gt;
It the phone configuration has been received but after a factory reset no phone requests have been received, you may need to disable the security certificates in the Yealink phone web interface under Security&amp;gt;Trusted Certificates:&lt;br /&gt;
* Only Accept Trusted Certificates -&amp;gt; Disabled&lt;br /&gt;
* Common Name Validation -&amp;gt; Disabled&lt;br /&gt;
* CA Certificates -&amp;gt; All Certificates&lt;br /&gt;
&lt;br /&gt;
==Related Articles==&lt;br /&gt;
* [[Howto:Deploy Yealink Devices on myApps|Deploy Yealink Devices]]&lt;br /&gt;
* [[Howto:Yealink IP phones - Yealink - 3rd Party Product|Yealink Devices Compatibility]]&lt;br /&gt;
&lt;br /&gt;
* SDK Integration (if the content is available)&lt;/div&gt;</summary>
		<author><name>Nfi</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Reference13r1:Concept_App_Service_Yealink&amp;diff=74519</id>
		<title>Reference13r1:Concept App Service Yealink</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Reference13r1:Concept_App_Service_Yealink&amp;diff=74519"/>
		<updated>2024-12-18T18:30:37Z</updated>

		<summary type="html">&lt;p&gt;Nfi: /* Apps */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Concept|Apps]]&lt;br /&gt;
The Provisioning App for Yealink is an App Service which can be installed on an innovaphone App Platform and is used to easily provision Yealink SIP devices with myApps. This enables the user to easily set up a Yealink SIP device via his profile. &#039;&#039;The administrator also has the possibility to set up a Yealink SIP device for a user via UsersAdmin.&#039;&#039;&lt;br /&gt;
When a Yealink phone is provisioned on Profile &#039;&#039;or UsersAdmin&#039;&#039;, the Yealink App connects to the Yealink Redirect To Provisioning Server (RPS) and redirects the phone to the Yealink App on the customer App Platform, where the config files will be requested afterwards. These config files are generated on the Yealink App with user data received from Users and device configuration data received from Devices.&lt;br /&gt;
== Applies To == &lt;br /&gt;
&lt;br /&gt;
* innovaphone PBX from version 13r1sr18&lt;br /&gt;
&lt;br /&gt;
==Requirements==&lt;br /&gt;
* innovaphone PBX&lt;br /&gt;
* innovaphone Application Platform&lt;br /&gt;
* Firmware V13r1xx&lt;br /&gt;
* Devices App&lt;br /&gt;
* Profile App&lt;br /&gt;
* Users Admin App&lt;br /&gt;
* MAC address of the Yealink Device (usually on the back of the device)&lt;br /&gt;
&lt;br /&gt;
== Apps ==&lt;br /&gt;
=== Yealink App (innovaphone-yealink) ===&lt;br /&gt;
[[Image: Yealink-App.png|yealink-app.png/|yealink-app.png/]]&lt;br /&gt;
This is an App, where the administrator can check the communication between the RPS and the Provisioning App.&lt;br /&gt;
&lt;br /&gt;
Also some config items can be edited on the hamburguer menu:&lt;br /&gt;
&lt;br /&gt;
* RPS account (We recommend that you use your own account. You will receive your own login credentials from your official Yealink distributor. &#039;&#039;&#039;The default login credentials should only be used for testing purposes.&#039;&#039;&#039;)&lt;br /&gt;
* Device provisioning account for configuration file access&lt;br /&gt;
* Interval for phone updates&lt;br /&gt;
* Timeserver and timezone&lt;br /&gt;
* Device Admin account credentials&lt;br /&gt;
* Media Relay option for the HW-ID&lt;br /&gt;
* SIP protocol (TCP or TLS)&lt;br /&gt;
* HTTP(S) protocol for provisioning access&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
;Websocket: to get the URL of the app, so the phones can be redirected&lt;br /&gt;
;Admin: to be able to edit the device on the User object&lt;br /&gt;
;Services: needed to use the Devices API (com.innovaphone.devices), so the phone configuration can be received&lt;br /&gt;
;Devices-API: gives access to the Devices App, which is needed for the provisioning of phones&lt;br /&gt;
&lt;br /&gt;
Parameters for Profile App Object:&lt;br /&gt;
&lt;br /&gt;
;Yealink: gives access to the Provisioning App, which is needed for the provisioning of phones&lt;br /&gt;
&lt;br /&gt;
== PBX Manager Plugins ==&lt;br /&gt;
&lt;br /&gt;
=== Yealink ===&lt;br /&gt;
&lt;br /&gt;
With the Yealink plugin App Objects can be created, edited and deleted on the PBX.&lt;br /&gt;
&lt;br /&gt;
==Configuration==&lt;br /&gt;
* Download the Provisioning App for Yealink via App Store.&lt;br /&gt;
* Install the App on the App Platform Manager.&lt;br /&gt;
* Create a instance for the Provisioning App for Yealink on the App Platform Manager.&lt;br /&gt;
* Create a new PBX Object with the PBX Manager Plugin.&lt;br /&gt;
* Assign App to authorized (admin) users, which will be allowed to open the Admin UI of the Provisioning App.&lt;br /&gt;
* Set access in the Profile App Object in the advanced UI to the Provisioning App for Yealink. This gives access to the Provisioning App for Yealink, which is needed for the provisioning of phones.&lt;br /&gt;
&lt;br /&gt;
[[File:RPS-account.png|alt=RPS account|thumb|rps-account.png/]]&lt;br /&gt;
Do not forget to check the default configuration on the hamburguer menu of the Provisioning App. There it is possible to set:&lt;br /&gt;
&lt;br /&gt;
* Your own RPS account (We recommend that you use your own account. You will receive your own login credentials from your official Yealink distributor. &#039;&#039;&#039;The default login credentials should only be used for testing purposes.&#039;&#039;&#039;)  &lt;br /&gt;
&lt;br /&gt;
* The interval when the phone must ask  for updates&lt;br /&gt;
* The default device configuration parameters (only updated when then phone requests the configuration)&lt;br /&gt;
** NTP server&lt;br /&gt;
** Timezone&lt;br /&gt;
** Location&lt;br /&gt;
** Media Relay (Set [[Reference13r2:PBX/Objects#Devices Config Flags|Media Relay Flag]] &#039;&#039;&#039;on the HW-ID of the PBX user object&#039;&#039;&#039; and disable ICE on the phone, &#039;&#039;&#039;DO NOT set media relay for the whole pbx!!!&#039;&#039;&#039;)&lt;br /&gt;
** TLS (To use SIP/TLS for registration, you have to put the root certificate (Yealink Equipment Issuing CA or Yealink Root CA) for devices from Yealink in the trust list of the Reverse Proxy and PBX. Please ask Yealink for this Yealink Equipment Issuing CA certificate or Yealink Root CA.)&lt;br /&gt;
** HTTPS (This defines if the Provisioning URL configured on the Phone must be HTTP or HTTPS)&lt;br /&gt;
&lt;br /&gt;
Also refer to [[Howto:Deploy Yealink Devices on myApps|this illustrated configuration document]] on how to deploy Yealink devices.&lt;br /&gt;
&lt;br /&gt;
==Provisioning workflow==&lt;br /&gt;
[[Image: Yealink workflow.jpg|thumb|upright=1.0|right|yealink_workflow.jpg/|yealink_workflow.jpg/]]&lt;br /&gt;
First of all, when the App starts running it &#039;&#039;&#039;publishes a Provisioning API&#039;&#039;&#039; (&#039;&#039;com.innovaphone.provisioning&#039;&#039;), so that the Profile App and Users Admin App will be able to find it as provider. For this Profile and Users Admin must be able to access the Provisioning App, which can be configured on each App Object on the PBX. This is also automatically configured on the PBX Manager when adding or editing a Provisioning App Object. The Provisioning App also registers its URL with a server name (which is usually the 24 first characters of the domain name) on the Yealink RPS everytime the app service starts, which will be used to redirect the devices afterwards.&lt;br /&gt;
&lt;br /&gt;
On &#039;&#039;&#039;Profile&#039;&#039;&#039; (or Users Admin) the provisioning of a new phone is started and it looks for the Provisioning APIs that have been published. The user must select which one is the right one for the given phone (in this case Yealink) because there could be more than one manufacturer. Afterwards, the provisioning categories and the provisioning code are requested to Devices and saved on the Users Service. Then the &#039;&#039;&#039;MAC address&#039;&#039;&#039; must be entered on Profile. This with the provisioning code (and also other user-related data like username) is sent from Users to the Provisioning App.&lt;br /&gt;
&lt;br /&gt;
Next the Provisioning App opens a &#039;&#039;&#039;Sysclient&#039;&#039;&#039; connection and when it is set Devices sends the configuration for the phone through the Sysclient connection. This connection remains opened and it is used to receive configuration updates. &lt;br /&gt;
&lt;br /&gt;
Finally the phone is redirected on the &#039;&#039;&#039;Yealink RPS&#039;&#039;&#039;, which will redirect the phone to the Provisioning App when it requests for the configuration. This can be triggered it by doing a Factory Reset. The phone requests the configuration by sending a GET request to the app, which will be answered with the &#039;&#039;&#039;configuration file&#039;&#039;&#039;. If an &#039;&#039;&#039;update timeout&#039;&#039;&#039; has been defined on the Yealink App, the phone will keep requesting for a new configuration file periodically to the Provisioning App. After the configuration file has been sent, the &#039;&#039;&#039;device&#039;&#039;&#039; on the user object is edited to update the Media Relay, TLS only and Reverse Proxy flags.&lt;br /&gt;
&lt;br /&gt;
==How to provision a device==&lt;br /&gt;
Yealink devices can be added by provisioning a new phone but selecting Yealink instead of innovaphone as the manufacturer. From a user point of view this should work as follows:&lt;br /&gt;
* Open myApps/Profile/My phones and select &amp;quot;&#039;&#039;&#039;+ Phone&#039;&#039;&#039;&amp;quot; to add a new device&lt;br /&gt;
* Then choose the manufacturer of the phone, in this case &#039;&#039;&#039;Yealink&#039;&#039;&#039;&lt;br /&gt;
* A drop down is displayed to select a &#039;&#039;&#039;category&#039;&#039;&#039;&lt;br /&gt;
* Enter the &#039;&#039;&#039;MAC&#039;&#039;&#039; address of the Yealink device (must be entered without &amp;quot;:&amp;quot; or &amp;quot;-&amp;quot;)&lt;br /&gt;
* Enter a &#039;&#039;&#039;name&#039;&#039;&#039; for this device, which will be the name of the app displayed on the home screen afterwards&lt;br /&gt;
* Unpacks the phone and connects it to the network (or do a factory reset on the device)&lt;br /&gt;
* The phone looks for the configuration and when it has finished the user should be able to make calls&lt;br /&gt;
&lt;br /&gt;
At the end:&lt;br /&gt;
* A new app must have been added to the home screen&lt;br /&gt;
* A new device must have been added to the user object (this can be checked on Users Admin or on the PBX)&lt;br /&gt;
* A new entry for the given device must have been added on the Devices tab of the Provisioning App&lt;br /&gt;
* The device must have been added to the Devices App&lt;br /&gt;
&lt;br /&gt;
==User interface==&lt;br /&gt;
[[Image: Yealink RPS history.jpg|thumb|upright=1.0|right|yealink_rps_history.jpg/|yealink_rps_history.jpg/]]&lt;br /&gt;
[[Image: Yealink Devices.jpg|thumb|upright=1.0|right|yealink_devices.jpg/|yealink_devices.jpg/]]&lt;br /&gt;
In the user interface of the administrator app there are 2 tabs: RPS history and Devices.&lt;br /&gt;
&lt;br /&gt;
On the &#039;&#039;&#039;RPS history&#039;&#039;&#039; tab, the history of the comunication between the app and the Yealink RPS can be seen. Here the commands sent from the app to the Yealink RPS with their answers are displayed. To be considered:&lt;br /&gt;
* Everytime the app starts, an &#039;&#039;&#039;ADD SERVER&#039;&#039;&#039; command is sent to register the URL of the app to the server name. After the first start of the app, this command will be always answered with &#039;&#039;&#039;Error: The server name has been used&#039;&#039;&#039; because the URL was already registered the first time.&lt;br /&gt;
* Every time a phone is provisioned, first a &#039;&#039;&#039;DEREGISTER DEVICE&#039;&#039;&#039; command is sent to remove it from the RPS if the phone has already been provisioned before. Then a &#039;&#039;&#039;REDIRECT DEVICE&#039;&#039;&#039; command is sent to redirect the config requests from the phone to the app. If the phone has not already been provisioned before, the first command will be answered with &#039;&#039;&#039;Error: Invalid MAC(s)&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
On the &#039;&#039;&#039;Devices&#039;&#039;&#039; tab, the list of all the devices provisioned by the app and their status are displayed. To be considered:&lt;br /&gt;
* If a phone is not on the list, the device data has not been received by the app.&lt;br /&gt;
* If the value of the &#039;&#039;&#039;Device Config&#039;&#039;&#039; column is not &#039;&#039;&#039;Config Received&#039;&#039;&#039;, then the sysclient Connection between Devices App and the Provisioning App has not been set or the configuration has not been received.&lt;br /&gt;
* If the value of the &#039;&#039;&#039;Phone Requests&#039;&#039;&#039; column is not &#039;&#039;&#039;Provisioned&#039;&#039;&#039;, that means that the phone has still not requested the config file to the app. In this case, a Factory Reset should be done on the phone.&lt;br /&gt;
* On the &#039;&#039;&#039;Last Config Request&#039;&#039;&#039; column, the timestamp of the last config request done by the phone is displayed.&lt;br /&gt;
&lt;br /&gt;
==Known issues==&lt;br /&gt;
[[Image: Yealink trusted certificates.jpg|thumb|upright=1.0|right|yealink_trusted_certificates.jpg/|yealink_trusted_certificates.jpg/]]&lt;br /&gt;
It the phone configuration has been received but after a factory reset no phone requests have been received, you may need to disable the security certificates in the Yealink phone web interface under Security&amp;gt;Trusted Certificates:&lt;br /&gt;
* Only Accept Trusted Certificates -&amp;gt; Disabled&lt;br /&gt;
* Common Name Validation -&amp;gt; Disabled&lt;br /&gt;
* CA Certificates -&amp;gt; All Certificates&lt;br /&gt;
&lt;br /&gt;
==Related Articles==&lt;br /&gt;
* [[Howto:Deploy Yealink Devices on myApps|Deploy Yealink Devices]]&lt;br /&gt;
* [[Howto:Yealink IP phones - Yealink - 3rd Party Product|Yealink Devices Compatibility]]&lt;br /&gt;
&lt;br /&gt;
* SDK Integration (if the content is available)&lt;/div&gt;</summary>
		<author><name>Nfi</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Reference13r1:Concept_App_Service_Yealink&amp;diff=74518</id>
		<title>Reference13r1:Concept App Service Yealink</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Reference13r1:Concept_App_Service_Yealink&amp;diff=74518"/>
		<updated>2024-12-18T18:30:13Z</updated>

		<summary type="html">&lt;p&gt;Nfi: /* Configuration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Concept|Apps]]&lt;br /&gt;
The Provisioning App for Yealink is an App Service which can be installed on an innovaphone App Platform and is used to easily provision Yealink SIP devices with myApps. This enables the user to easily set up a Yealink SIP device via his profile. &#039;&#039;The administrator also has the possibility to set up a Yealink SIP device for a user via UsersAdmin.&#039;&#039;&lt;br /&gt;
When a Yealink phone is provisioned on Profile &#039;&#039;or UsersAdmin&#039;&#039;, the Yealink App connects to the Yealink Redirect To Provisioning Server (RPS) and redirects the phone to the Yealink App on the customer App Platform, where the config files will be requested afterwards. These config files are generated on the Yealink App with user data received from Users and device configuration data received from Devices.&lt;br /&gt;
== Applies To == &lt;br /&gt;
&lt;br /&gt;
* innovaphone PBX from version 13r1sr18&lt;br /&gt;
&lt;br /&gt;
==Requirements==&lt;br /&gt;
* innovaphone PBX&lt;br /&gt;
* innovaphone Application Platform&lt;br /&gt;
* Firmware V13r1xx&lt;br /&gt;
* Devices App&lt;br /&gt;
* Profile App&lt;br /&gt;
* Users Admin App&lt;br /&gt;
* MAC address of the Yealink Device (usually on the back of the device)&lt;br /&gt;
&lt;br /&gt;
== Apps ==&lt;br /&gt;
[[File:RPS-account.png|thumb|rps-account.png/|rps-account.png/]]&lt;br /&gt;
&lt;br /&gt;
=== Yealink App (innovaphone-yealink) ===&lt;br /&gt;
[[Image: Yealink-App.png|yealink-app.png/|yealink-app.png/]]&lt;br /&gt;
This is an App, where the administrator can check the communication between the RPS and the Provisioning App.&lt;br /&gt;
&lt;br /&gt;
Also some config items can be edited on the hamburguer menu:&lt;br /&gt;
&lt;br /&gt;
* RPS account (We recommend that you use your own account. You will receive your own login credentials from your official Yealink distributor. &#039;&#039;&#039;The default login credentials should only be used for testing purposes.&#039;&#039;&#039;)&lt;br /&gt;
* Device provisioning account for configuration file access&lt;br /&gt;
* Interval for phone updates&lt;br /&gt;
* Timeserver and timezone&lt;br /&gt;
* Device Admin account credentials&lt;br /&gt;
* Media Relay option for the HW-ID&lt;br /&gt;
* SIP protocol (TCP or TLS)&lt;br /&gt;
* HTTP(S) protocol for provisioning access&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
;Websocket: to get the URL of the app, so the phones can be redirected&lt;br /&gt;
;Admin: to be able to edit the device on the User object&lt;br /&gt;
;Services: needed to use the Devices API (com.innovaphone.devices), so the phone configuration can be received&lt;br /&gt;
;Devices-API: gives access to the Devices App, which is needed for the provisioning of phones&lt;br /&gt;
&lt;br /&gt;
Parameters for Profile App Object:&lt;br /&gt;
&lt;br /&gt;
;Yealink: gives access to the Provisioning App, which is needed for the provisioning of phones&lt;br /&gt;
&lt;br /&gt;
== PBX Manager Plugins ==&lt;br /&gt;
&lt;br /&gt;
=== Yealink ===&lt;br /&gt;
&lt;br /&gt;
With the Yealink plugin App Objects can be created, edited and deleted on the PBX.&lt;br /&gt;
&lt;br /&gt;
==Configuration==&lt;br /&gt;
* Download the Provisioning App for Yealink via App Store.&lt;br /&gt;
* Install the App on the App Platform Manager.&lt;br /&gt;
* Create a instance for the Provisioning App for Yealink on the App Platform Manager.&lt;br /&gt;
* Create a new PBX Object with the PBX Manager Plugin.&lt;br /&gt;
* Assign App to authorized (admin) users, which will be allowed to open the Admin UI of the Provisioning App.&lt;br /&gt;
* Set access in the Profile App Object in the advanced UI to the Provisioning App for Yealink. This gives access to the Provisioning App for Yealink, which is needed for the provisioning of phones.&lt;br /&gt;
&lt;br /&gt;
[[File:RPS-account.png|alt=RPS account|thumb]]&lt;br /&gt;
Do not forget to check the default configuration on the hamburguer menu of the Provisioning App. There it is possible to set:&lt;br /&gt;
&lt;br /&gt;
* Your own RPS account (We recommend that you use your own account. You will receive your own login credentials from your official Yealink distributor. &#039;&#039;&#039;The default login credentials should only be used for testing purposes.&#039;&#039;&#039;)  &lt;br /&gt;
&lt;br /&gt;
* The interval when the phone must ask  for updates&lt;br /&gt;
* The default device configuration parameters (only updated when then phone requests the configuration)&lt;br /&gt;
** NTP server&lt;br /&gt;
** Timezone&lt;br /&gt;
** Location&lt;br /&gt;
** Media Relay (Set [[Reference13r2:PBX/Objects#Devices Config Flags|Media Relay Flag]] &#039;&#039;&#039;on the HW-ID of the PBX user object&#039;&#039;&#039; and disable ICE on the phone, &#039;&#039;&#039;DO NOT set media relay for the whole pbx!!!&#039;&#039;&#039;)&lt;br /&gt;
** TLS (To use SIP/TLS for registration, you have to put the root certificate (Yealink Equipment Issuing CA or Yealink Root CA) for devices from Yealink in the trust list of the Reverse Proxy and PBX. Please ask Yealink for this Yealink Equipment Issuing CA certificate or Yealink Root CA.)&lt;br /&gt;
** HTTPS (This defines if the Provisioning URL configured on the Phone must be HTTP or HTTPS)&lt;br /&gt;
&lt;br /&gt;
Also refer to [[Howto:Deploy Yealink Devices on myApps|this illustrated configuration document]] on how to deploy Yealink devices.&lt;br /&gt;
&lt;br /&gt;
==Provisioning workflow==&lt;br /&gt;
[[Image: Yealink workflow.jpg|thumb|upright=1.0|right|yealink_workflow.jpg/|yealink_workflow.jpg/]]&lt;br /&gt;
First of all, when the App starts running it &#039;&#039;&#039;publishes a Provisioning API&#039;&#039;&#039; (&#039;&#039;com.innovaphone.provisioning&#039;&#039;), so that the Profile App and Users Admin App will be able to find it as provider. For this Profile and Users Admin must be able to access the Provisioning App, which can be configured on each App Object on the PBX. This is also automatically configured on the PBX Manager when adding or editing a Provisioning App Object. The Provisioning App also registers its URL with a server name (which is usually the 24 first characters of the domain name) on the Yealink RPS everytime the app service starts, which will be used to redirect the devices afterwards.&lt;br /&gt;
&lt;br /&gt;
On &#039;&#039;&#039;Profile&#039;&#039;&#039; (or Users Admin) the provisioning of a new phone is started and it looks for the Provisioning APIs that have been published. The user must select which one is the right one for the given phone (in this case Yealink) because there could be more than one manufacturer. Afterwards, the provisioning categories and the provisioning code are requested to Devices and saved on the Users Service. Then the &#039;&#039;&#039;MAC address&#039;&#039;&#039; must be entered on Profile. This with the provisioning code (and also other user-related data like username) is sent from Users to the Provisioning App.&lt;br /&gt;
&lt;br /&gt;
Next the Provisioning App opens a &#039;&#039;&#039;Sysclient&#039;&#039;&#039; connection and when it is set Devices sends the configuration for the phone through the Sysclient connection. This connection remains opened and it is used to receive configuration updates. &lt;br /&gt;
&lt;br /&gt;
Finally the phone is redirected on the &#039;&#039;&#039;Yealink RPS&#039;&#039;&#039;, which will redirect the phone to the Provisioning App when it requests for the configuration. This can be triggered it by doing a Factory Reset. The phone requests the configuration by sending a GET request to the app, which will be answered with the &#039;&#039;&#039;configuration file&#039;&#039;&#039;. If an &#039;&#039;&#039;update timeout&#039;&#039;&#039; has been defined on the Yealink App, the phone will keep requesting for a new configuration file periodically to the Provisioning App. After the configuration file has been sent, the &#039;&#039;&#039;device&#039;&#039;&#039; on the user object is edited to update the Media Relay, TLS only and Reverse Proxy flags.&lt;br /&gt;
&lt;br /&gt;
==How to provision a device==&lt;br /&gt;
Yealink devices can be added by provisioning a new phone but selecting Yealink instead of innovaphone as the manufacturer. From a user point of view this should work as follows:&lt;br /&gt;
* Open myApps/Profile/My phones and select &amp;quot;&#039;&#039;&#039;+ Phone&#039;&#039;&#039;&amp;quot; to add a new device&lt;br /&gt;
* Then choose the manufacturer of the phone, in this case &#039;&#039;&#039;Yealink&#039;&#039;&#039;&lt;br /&gt;
* A drop down is displayed to select a &#039;&#039;&#039;category&#039;&#039;&#039;&lt;br /&gt;
* Enter the &#039;&#039;&#039;MAC&#039;&#039;&#039; address of the Yealink device (must be entered without &amp;quot;:&amp;quot; or &amp;quot;-&amp;quot;)&lt;br /&gt;
* Enter a &#039;&#039;&#039;name&#039;&#039;&#039; for this device, which will be the name of the app displayed on the home screen afterwards&lt;br /&gt;
* Unpacks the phone and connects it to the network (or do a factory reset on the device)&lt;br /&gt;
* The phone looks for the configuration and when it has finished the user should be able to make calls&lt;br /&gt;
&lt;br /&gt;
At the end:&lt;br /&gt;
* A new app must have been added to the home screen&lt;br /&gt;
* A new device must have been added to the user object (this can be checked on Users Admin or on the PBX)&lt;br /&gt;
* A new entry for the given device must have been added on the Devices tab of the Provisioning App&lt;br /&gt;
* The device must have been added to the Devices App&lt;br /&gt;
&lt;br /&gt;
==User interface==&lt;br /&gt;
[[Image: Yealink RPS history.jpg|thumb|upright=1.0|right|yealink_rps_history.jpg/|yealink_rps_history.jpg/]]&lt;br /&gt;
[[Image: Yealink Devices.jpg|thumb|upright=1.0|right|yealink_devices.jpg/|yealink_devices.jpg/]]&lt;br /&gt;
In the user interface of the administrator app there are 2 tabs: RPS history and Devices.&lt;br /&gt;
&lt;br /&gt;
On the &#039;&#039;&#039;RPS history&#039;&#039;&#039; tab, the history of the comunication between the app and the Yealink RPS can be seen. Here the commands sent from the app to the Yealink RPS with their answers are displayed. To be considered:&lt;br /&gt;
* Everytime the app starts, an &#039;&#039;&#039;ADD SERVER&#039;&#039;&#039; command is sent to register the URL of the app to the server name. After the first start of the app, this command will be always answered with &#039;&#039;&#039;Error: The server name has been used&#039;&#039;&#039; because the URL was already registered the first time.&lt;br /&gt;
* Every time a phone is provisioned, first a &#039;&#039;&#039;DEREGISTER DEVICE&#039;&#039;&#039; command is sent to remove it from the RPS if the phone has already been provisioned before. Then a &#039;&#039;&#039;REDIRECT DEVICE&#039;&#039;&#039; command is sent to redirect the config requests from the phone to the app. If the phone has not already been provisioned before, the first command will be answered with &#039;&#039;&#039;Error: Invalid MAC(s)&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
On the &#039;&#039;&#039;Devices&#039;&#039;&#039; tab, the list of all the devices provisioned by the app and their status are displayed. To be considered:&lt;br /&gt;
* If a phone is not on the list, the device data has not been received by the app.&lt;br /&gt;
* If the value of the &#039;&#039;&#039;Device Config&#039;&#039;&#039; column is not &#039;&#039;&#039;Config Received&#039;&#039;&#039;, then the sysclient Connection between Devices App and the Provisioning App has not been set or the configuration has not been received.&lt;br /&gt;
* If the value of the &#039;&#039;&#039;Phone Requests&#039;&#039;&#039; column is not &#039;&#039;&#039;Provisioned&#039;&#039;&#039;, that means that the phone has still not requested the config file to the app. In this case, a Factory Reset should be done on the phone.&lt;br /&gt;
* On the &#039;&#039;&#039;Last Config Request&#039;&#039;&#039; column, the timestamp of the last config request done by the phone is displayed.&lt;br /&gt;
&lt;br /&gt;
==Known issues==&lt;br /&gt;
[[Image: Yealink trusted certificates.jpg|thumb|upright=1.0|right|yealink_trusted_certificates.jpg/|yealink_trusted_certificates.jpg/]]&lt;br /&gt;
It the phone configuration has been received but after a factory reset no phone requests have been received, you may need to disable the security certificates in the Yealink phone web interface under Security&amp;gt;Trusted Certificates:&lt;br /&gt;
* Only Accept Trusted Certificates -&amp;gt; Disabled&lt;br /&gt;
* Common Name Validation -&amp;gt; Disabled&lt;br /&gt;
* CA Certificates -&amp;gt; All Certificates&lt;br /&gt;
&lt;br /&gt;
==Related Articles==&lt;br /&gt;
* [[Howto:Deploy Yealink Devices on myApps|Deploy Yealink Devices]]&lt;br /&gt;
* [[Howto:Yealink IP phones - Yealink - 3rd Party Product|Yealink Devices Compatibility]]&lt;br /&gt;
&lt;br /&gt;
* SDK Integration (if the content is available)&lt;/div&gt;</summary>
		<author><name>Nfi</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Reference13r1:Concept_App_Service_Yealink&amp;diff=74517</id>
		<title>Reference13r1:Concept App Service Yealink</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Reference13r1:Concept_App_Service_Yealink&amp;diff=74517"/>
		<updated>2024-12-18T18:25:21Z</updated>

		<summary type="html">&lt;p&gt;Nfi: /* Yealink App (innovaphone-yealink) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Concept|Apps]]&lt;br /&gt;
The Provisioning App for Yealink is an App Service which can be installed on an innovaphone App Platform and is used to easily provision Yealink SIP devices with myApps. This enables the user to easily set up a Yealink SIP device via his profile. &#039;&#039;The administrator also has the possibility to set up a Yealink SIP device for a user via UsersAdmin.&#039;&#039;&lt;br /&gt;
When a Yealink phone is provisioned on Profile &#039;&#039;or UsersAdmin&#039;&#039;, the Yealink App connects to the Yealink Redirect To Provisioning Server (RPS) and redirects the phone to the Yealink App on the customer App Platform, where the config files will be requested afterwards. These config files are generated on the Yealink App with user data received from Users and device configuration data received from Devices.&lt;br /&gt;
== Applies To == &lt;br /&gt;
&lt;br /&gt;
* innovaphone PBX from version 13r1sr18&lt;br /&gt;
&lt;br /&gt;
==Requirements==&lt;br /&gt;
* innovaphone PBX&lt;br /&gt;
* innovaphone Application Platform&lt;br /&gt;
* Firmware V13r1xx&lt;br /&gt;
* Devices App&lt;br /&gt;
* Profile App&lt;br /&gt;
* Users Admin App&lt;br /&gt;
* MAC address of the Yealink Device (usually on the back of the device)&lt;br /&gt;
&lt;br /&gt;
== Apps ==&lt;br /&gt;
[[File:RPS-account.png|thumb|rps-account.png/]]&lt;br /&gt;
&lt;br /&gt;
=== Yealink App (innovaphone-yealink) ===&lt;br /&gt;
[[Image: Yealink-App.png|yealink-app.png/|yealink-app.png/]]&lt;br /&gt;
This is an App, where the administrator can check the communication between the RPS and the Provisioning App.&lt;br /&gt;
&lt;br /&gt;
Also some config items can be edited on the hamburguer menu:&lt;br /&gt;
&lt;br /&gt;
* RPS account (We recommend that you use your own account. You will receive your own login credentials from your official Yealink distributor. &#039;&#039;&#039;The default login credentials should only be used for testing purposes.&#039;&#039;&#039;)&lt;br /&gt;
* Device provisioning account for configuration file access&lt;br /&gt;
* Interval for phone updates&lt;br /&gt;
* Timeserver and timezone&lt;br /&gt;
* Device Admin account credentials&lt;br /&gt;
* Media Relay option for the HW-ID&lt;br /&gt;
* SIP protocol (TCP or TLS)&lt;br /&gt;
* HTTP(S) protocol for provisioning access&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
;Websocket: to get the URL of the app, so the phones can be redirected&lt;br /&gt;
;Admin: to be able to edit the device on the User object&lt;br /&gt;
;Services: needed to use the Devices API (com.innovaphone.devices), so the phone configuration can be received&lt;br /&gt;
;Devices-API: gives access to the Devices App, which is needed for the provisioning of phones&lt;br /&gt;
&lt;br /&gt;
Parameters for Profile App Object:&lt;br /&gt;
&lt;br /&gt;
;Yealink: gives access to the Provisioning App, which is needed for the provisioning of phones&lt;br /&gt;
&lt;br /&gt;
== PBX Manager Plugins ==&lt;br /&gt;
&lt;br /&gt;
=== Yealink ===&lt;br /&gt;
&lt;br /&gt;
With the Yealink plugin App Objects can be created, edited and deleted on the PBX.&lt;br /&gt;
&lt;br /&gt;
==Configuration==&lt;br /&gt;
* Download the Provisioning App for Yealink via App Store.&lt;br /&gt;
* Install the App on the App Platform Manager.&lt;br /&gt;
* Create a instance for the Provisioning App for Yealink on the App Platform Manager.&lt;br /&gt;
* Create a new PBX Object with the PBX Manager Plugin.&lt;br /&gt;
* Assign App to authorized (admin) users, which will be allowed to open the Admin UI of the Provisioning App.&lt;br /&gt;
* Set access in the Profile App Object in the advanced UI to the Provisioning App for Yealink. This gives access to the Provisioning App for Yealink, which is needed for the provisioning of phones.&lt;br /&gt;
&lt;br /&gt;
Do not forget to check the default configuration on the hamburguer menu of the Provisioning App. There it is possible to set:&lt;br /&gt;
* Your own RPS account&lt;br /&gt;
* The interval when the phone must ask  for updates&lt;br /&gt;
* The default device configuration parameters (only updated when then phone requests the configuration)&lt;br /&gt;
** NTP server&lt;br /&gt;
** Timezone&lt;br /&gt;
** Location&lt;br /&gt;
** Media Relay (Set [[Reference13r2:PBX/Objects#Devices Config Flags|Media Relay Flag]] &#039;&#039;&#039;on the HW-ID of the PBX user object&#039;&#039;&#039; and disable ICE on the phone, &#039;&#039;&#039;DO NOT set media relay for the whole pbx!!!&#039;&#039;&#039;)&lt;br /&gt;
** TLS (To use SIP/TLS for registration, you have to put the root certificate (Yealink Equipment Issuing CA or Yealink Root CA) for devices from Yealink in the trust list of the Reverse Proxy and PBX. Please ask Yealink for this Yealink Equipment Issuing CA certificate or Yealink Root CA.)&lt;br /&gt;
** HTTPS (This defines if the Provisioning URL configured on the Phone must be HTTP or HTTPS)&lt;br /&gt;
&lt;br /&gt;
Also refer to [[Howto:Deploy Yealink Devices on myApps|this illustrated configuration document]] on how to deploy Yealink devices.&lt;br /&gt;
&lt;br /&gt;
==Provisioning workflow==&lt;br /&gt;
[[Image: Yealink workflow.jpg|thumb|upright=1.0|right|yealink_workflow.jpg/|yealink_workflow.jpg/]]&lt;br /&gt;
First of all, when the App starts running it &#039;&#039;&#039;publishes a Provisioning API&#039;&#039;&#039; (&#039;&#039;com.innovaphone.provisioning&#039;&#039;), so that the Profile App and Users Admin App will be able to find it as provider. For this Profile and Users Admin must be able to access the Provisioning App, which can be configured on each App Object on the PBX. This is also automatically configured on the PBX Manager when adding or editing a Provisioning App Object. The Provisioning App also registers its URL with a server name (which is usually the 24 first characters of the domain name) on the Yealink RPS everytime the app service starts, which will be used to redirect the devices afterwards.&lt;br /&gt;
&lt;br /&gt;
On &#039;&#039;&#039;Profile&#039;&#039;&#039; (or Users Admin) the provisioning of a new phone is started and it looks for the Provisioning APIs that have been published. The user must select which one is the right one for the given phone (in this case Yealink) because there could be more than one manufacturer. Afterwards, the provisioning categories and the provisioning code are requested to Devices and saved on the Users Service. Then the &#039;&#039;&#039;MAC address&#039;&#039;&#039; must be entered on Profile. This with the provisioning code (and also other user-related data like username) is sent from Users to the Provisioning App.&lt;br /&gt;
&lt;br /&gt;
Next the Provisioning App opens a &#039;&#039;&#039;Sysclient&#039;&#039;&#039; connection and when it is set Devices sends the configuration for the phone through the Sysclient connection. This connection remains opened and it is used to receive configuration updates. &lt;br /&gt;
&lt;br /&gt;
Finally the phone is redirected on the &#039;&#039;&#039;Yealink RPS&#039;&#039;&#039;, which will redirect the phone to the Provisioning App when it requests for the configuration. This can be triggered it by doing a Factory Reset. The phone requests the configuration by sending a GET request to the app, which will be answered with the &#039;&#039;&#039;configuration file&#039;&#039;&#039;. If an &#039;&#039;&#039;update timeout&#039;&#039;&#039; has been defined on the Yealink App, the phone will keep requesting for a new configuration file periodically to the Provisioning App. After the configuration file has been sent, the &#039;&#039;&#039;device&#039;&#039;&#039; on the user object is edited to update the Media Relay, TLS only and Reverse Proxy flags.&lt;br /&gt;
&lt;br /&gt;
==How to provision a device==&lt;br /&gt;
Yealink devices can be added by provisioning a new phone but selecting Yealink instead of innovaphone as the manufacturer. From a user point of view this should work as follows:&lt;br /&gt;
* Open myApps/Profile/My phones and select &amp;quot;&#039;&#039;&#039;+ Phone&#039;&#039;&#039;&amp;quot; to add a new device&lt;br /&gt;
* Then choose the manufacturer of the phone, in this case &#039;&#039;&#039;Yealink&#039;&#039;&#039;&lt;br /&gt;
* A drop down is displayed to select a &#039;&#039;&#039;category&#039;&#039;&#039;&lt;br /&gt;
* Enter the &#039;&#039;&#039;MAC&#039;&#039;&#039; address of the Yealink device (must be entered without &amp;quot;:&amp;quot; or &amp;quot;-&amp;quot;)&lt;br /&gt;
* Enter a &#039;&#039;&#039;name&#039;&#039;&#039; for this device, which will be the name of the app displayed on the home screen afterwards&lt;br /&gt;
* Unpacks the phone and connects it to the network (or do a factory reset on the device)&lt;br /&gt;
* The phone looks for the configuration and when it has finished the user should be able to make calls&lt;br /&gt;
&lt;br /&gt;
At the end:&lt;br /&gt;
* A new app must have been added to the home screen&lt;br /&gt;
* A new device must have been added to the user object (this can be checked on Users Admin or on the PBX)&lt;br /&gt;
* A new entry for the given device must have been added on the Devices tab of the Provisioning App&lt;br /&gt;
* The device must have been added to the Devices App&lt;br /&gt;
&lt;br /&gt;
==User interface==&lt;br /&gt;
[[Image: Yealink RPS history.jpg|thumb|upright=1.0|right|yealink_rps_history.jpg/|yealink_rps_history.jpg/]]&lt;br /&gt;
[[Image: Yealink Devices.jpg|thumb|upright=1.0|right|yealink_devices.jpg/|yealink_devices.jpg/]]&lt;br /&gt;
In the user interface of the administrator app there are 2 tabs: RPS history and Devices.&lt;br /&gt;
&lt;br /&gt;
On the &#039;&#039;&#039;RPS history&#039;&#039;&#039; tab, the history of the comunication between the app and the Yealink RPS can be seen. Here the commands sent from the app to the Yealink RPS with their answers are displayed. To be considered:&lt;br /&gt;
* Everytime the app starts, an &#039;&#039;&#039;ADD SERVER&#039;&#039;&#039; command is sent to register the URL of the app to the server name. After the first start of the app, this command will be always answered with &#039;&#039;&#039;Error: The server name has been used&#039;&#039;&#039; because the URL was already registered the first time.&lt;br /&gt;
* Every time a phone is provisioned, first a &#039;&#039;&#039;DEREGISTER DEVICE&#039;&#039;&#039; command is sent to remove it from the RPS if the phone has already been provisioned before. Then a &#039;&#039;&#039;REDIRECT DEVICE&#039;&#039;&#039; command is sent to redirect the config requests from the phone to the app. If the phone has not already been provisioned before, the first command will be answered with &#039;&#039;&#039;Error: Invalid MAC(s)&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
On the &#039;&#039;&#039;Devices&#039;&#039;&#039; tab, the list of all the devices provisioned by the app and their status are displayed. To be considered:&lt;br /&gt;
* If a phone is not on the list, the device data has not been received by the app.&lt;br /&gt;
* If the value of the &#039;&#039;&#039;Device Config&#039;&#039;&#039; column is not &#039;&#039;&#039;Config Received&#039;&#039;&#039;, then the sysclient Connection between Devices App and the Provisioning App has not been set or the configuration has not been received.&lt;br /&gt;
* If the value of the &#039;&#039;&#039;Phone Requests&#039;&#039;&#039; column is not &#039;&#039;&#039;Provisioned&#039;&#039;&#039;, that means that the phone has still not requested the config file to the app. In this case, a Factory Reset should be done on the phone.&lt;br /&gt;
* On the &#039;&#039;&#039;Last Config Request&#039;&#039;&#039; column, the timestamp of the last config request done by the phone is displayed.&lt;br /&gt;
&lt;br /&gt;
==Known issues==&lt;br /&gt;
[[Image: Yealink trusted certificates.jpg|thumb|upright=1.0|right|yealink_trusted_certificates.jpg/|yealink_trusted_certificates.jpg/]]&lt;br /&gt;
It the phone configuration has been received but after a factory reset no phone requests have been received, you may need to disable the security certificates in the Yealink phone web interface under Security&amp;gt;Trusted Certificates:&lt;br /&gt;
* Only Accept Trusted Certificates -&amp;gt; Disabled&lt;br /&gt;
* Common Name Validation -&amp;gt; Disabled&lt;br /&gt;
* CA Certificates -&amp;gt; All Certificates&lt;br /&gt;
&lt;br /&gt;
==Related Articles==&lt;br /&gt;
* [[Howto:Deploy Yealink Devices on myApps|Deploy Yealink Devices]]&lt;br /&gt;
* [[Howto:Yealink IP phones - Yealink - 3rd Party Product|Yealink Devices Compatibility]]&lt;br /&gt;
&lt;br /&gt;
* SDK Integration (if the content is available)&lt;/div&gt;</summary>
		<author><name>Nfi</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Reference13r1:Concept_App_Service_Yealink&amp;diff=74516</id>
		<title>Reference13r1:Concept App Service Yealink</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Reference13r1:Concept_App_Service_Yealink&amp;diff=74516"/>
		<updated>2024-12-18T18:19:08Z</updated>

		<summary type="html">&lt;p&gt;Nfi: /* Yealink App (innovaphone-yealink) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Concept|Apps]]&lt;br /&gt;
The Provisioning App for Yealink is an App Service which can be installed on an innovaphone App Platform and is used to easily provision Yealink SIP devices with myApps. This enables the user to easily set up a Yealink SIP device via his profile. &#039;&#039;The administrator also has the possibility to set up a Yealink SIP device for a user via UsersAdmin.&#039;&#039;&lt;br /&gt;
When a Yealink phone is provisioned on Profile &#039;&#039;or UsersAdmin&#039;&#039;, the Yealink App connects to the Yealink Redirect To Provisioning Server (RPS) and redirects the phone to the Yealink App on the customer App Platform, where the config files will be requested afterwards. These config files are generated on the Yealink App with user data received from Users and device configuration data received from Devices.&lt;br /&gt;
== Applies To == &lt;br /&gt;
&lt;br /&gt;
* innovaphone PBX from version 13r1sr18&lt;br /&gt;
&lt;br /&gt;
==Requirements==&lt;br /&gt;
* innovaphone PBX&lt;br /&gt;
* innovaphone Application Platform&lt;br /&gt;
* Firmware V13r1xx&lt;br /&gt;
* Devices App&lt;br /&gt;
* Profile App&lt;br /&gt;
* Users Admin App&lt;br /&gt;
* MAC address of the Yealink Device (usually on the back of the device)&lt;br /&gt;
&lt;br /&gt;
== Apps ==&lt;br /&gt;
[[File:RPS-account.png|thumb]]&lt;br /&gt;
&lt;br /&gt;
=== Yealink App (innovaphone-yealink) ===&lt;br /&gt;
[[Image: Yealink-App.png|yealink-app.png/|yealink-app.png/]]&lt;br /&gt;
This is an App, where the administrator can check the communication between the RPS and the Provisioning App.&lt;br /&gt;
&lt;br /&gt;
Also some config items can be edited on the hamburguer menu:&lt;br /&gt;
&lt;br /&gt;
* RPS account (We recommend that you use your own account. You will receive your own login credentials from your official Yealink distributor. &#039;&#039;&#039;The default login credentials should only be used for testing purposes.&#039;&#039;&#039;)&lt;br /&gt;
* Interval for phone updates&lt;br /&gt;
* Timeserver and timezone&lt;br /&gt;
* SIP protocol (TCP or TLS)&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
;Websocket: to get the URL of the app, so the phones can be redirected&lt;br /&gt;
;Admin: to be able to edit the device on the User object&lt;br /&gt;
;Services: needed to use the Devices API (com.innovaphone.devices), so the phone configuration can be received&lt;br /&gt;
;Devices-API: gives access to the Devices App, which is needed for the provisioning of phones&lt;br /&gt;
&lt;br /&gt;
Parameters for Profile App Object:&lt;br /&gt;
&lt;br /&gt;
;Yealink: gives access to the Provisioning App, which is needed for the provisioning of phones&lt;br /&gt;
&lt;br /&gt;
== PBX Manager Plugins ==&lt;br /&gt;
&lt;br /&gt;
=== Yealink ===&lt;br /&gt;
&lt;br /&gt;
With the Yealink plugin App Objects can be created, edited and deleted on the PBX.&lt;br /&gt;
&lt;br /&gt;
==Configuration==&lt;br /&gt;
* Download the Provisioning App for Yealink via App Store.&lt;br /&gt;
* Install the App on the App Platform Manager.&lt;br /&gt;
* Create a instance for the Provisioning App for Yealink on the App Platform Manager.&lt;br /&gt;
* Create a new PBX Object with the PBX Manager Plugin.&lt;br /&gt;
* Assign App to authorized (admin) users, which will be allowed to open the Admin UI of the Provisioning App.&lt;br /&gt;
* Set access in the Profile App Object in the advanced UI to the Provisioning App for Yealink. This gives access to the Provisioning App for Yealink, which is needed for the provisioning of phones.&lt;br /&gt;
&lt;br /&gt;
Do not forget to check the default configuration on the hamburguer menu of the Provisioning App. There it is possible to set:&lt;br /&gt;
* Your own RPS account&lt;br /&gt;
* The interval when the phone must ask  for updates&lt;br /&gt;
* The default device configuration parameters (only updated when then phone requests the configuration)&lt;br /&gt;
** NTP server&lt;br /&gt;
** Timezone&lt;br /&gt;
** Location&lt;br /&gt;
** Media Relay (Set [[Reference13r2:PBX/Objects#Devices Config Flags|Media Relay Flag]] &#039;&#039;&#039;on the HW-ID of the PBX user object&#039;&#039;&#039; and disable ICE on the phone, &#039;&#039;&#039;DO NOT set media relay for the whole pbx!!!&#039;&#039;&#039;)&lt;br /&gt;
** TLS (To use SIP/TLS for registration, you have to put the root certificate (Yealink Equipment Issuing CA or Yealink Root CA) for devices from Yealink in the trust list of the Reverse Proxy and PBX. Please ask Yealink for this Yealink Equipment Issuing CA certificate or Yealink Root CA.)&lt;br /&gt;
** HTTPS (This defines if the Provisioning URL configured on the Phone must be HTTP or HTTPS)&lt;br /&gt;
&lt;br /&gt;
Also refer to [[Howto:Deploy Yealink Devices on myApps|this illustrated configuration document]] on how to deploy Yealink devices.&lt;br /&gt;
&lt;br /&gt;
==Provisioning workflow==&lt;br /&gt;
[[Image: Yealink workflow.jpg|thumb|upright=1.0|right|yealink_workflow.jpg/|yealink_workflow.jpg/]]&lt;br /&gt;
First of all, when the App starts running it &#039;&#039;&#039;publishes a Provisioning API&#039;&#039;&#039; (&#039;&#039;com.innovaphone.provisioning&#039;&#039;), so that the Profile App and Users Admin App will be able to find it as provider. For this Profile and Users Admin must be able to access the Provisioning App, which can be configured on each App Object on the PBX. This is also automatically configured on the PBX Manager when adding or editing a Provisioning App Object. The Provisioning App also registers its URL with a server name (which is usually the 24 first characters of the domain name) on the Yealink RPS everytime the app service starts, which will be used to redirect the devices afterwards.&lt;br /&gt;
&lt;br /&gt;
On &#039;&#039;&#039;Profile&#039;&#039;&#039; (or Users Admin) the provisioning of a new phone is started and it looks for the Provisioning APIs that have been published. The user must select which one is the right one for the given phone (in this case Yealink) because there could be more than one manufacturer. Afterwards, the provisioning categories and the provisioning code are requested to Devices and saved on the Users Service. Then the &#039;&#039;&#039;MAC address&#039;&#039;&#039; must be entered on Profile. This with the provisioning code (and also other user-related data like username) is sent from Users to the Provisioning App.&lt;br /&gt;
&lt;br /&gt;
Next the Provisioning App opens a &#039;&#039;&#039;Sysclient&#039;&#039;&#039; connection and when it is set Devices sends the configuration for the phone through the Sysclient connection. This connection remains opened and it is used to receive configuration updates. &lt;br /&gt;
&lt;br /&gt;
Finally the phone is redirected on the &#039;&#039;&#039;Yealink RPS&#039;&#039;&#039;, which will redirect the phone to the Provisioning App when it requests for the configuration. This can be triggered it by doing a Factory Reset. The phone requests the configuration by sending a GET request to the app, which will be answered with the &#039;&#039;&#039;configuration file&#039;&#039;&#039;. If an &#039;&#039;&#039;update timeout&#039;&#039;&#039; has been defined on the Yealink App, the phone will keep requesting for a new configuration file periodically to the Provisioning App. After the configuration file has been sent, the &#039;&#039;&#039;device&#039;&#039;&#039; on the user object is edited to update the Media Relay, TLS only and Reverse Proxy flags.&lt;br /&gt;
&lt;br /&gt;
==How to provision a device==&lt;br /&gt;
Yealink devices can be added by provisioning a new phone but selecting Yealink instead of innovaphone as the manufacturer. From a user point of view this should work as follows:&lt;br /&gt;
* Open myApps/Profile/My phones and select &amp;quot;&#039;&#039;&#039;+ Phone&#039;&#039;&#039;&amp;quot; to add a new device&lt;br /&gt;
* Then choose the manufacturer of the phone, in this case &#039;&#039;&#039;Yealink&#039;&#039;&#039;&lt;br /&gt;
* A drop down is displayed to select a &#039;&#039;&#039;category&#039;&#039;&#039;&lt;br /&gt;
* Enter the &#039;&#039;&#039;MAC&#039;&#039;&#039; address of the Yealink device (must be entered without &amp;quot;:&amp;quot; or &amp;quot;-&amp;quot;)&lt;br /&gt;
* Enter a &#039;&#039;&#039;name&#039;&#039;&#039; for this device, which will be the name of the app displayed on the home screen afterwards&lt;br /&gt;
* Unpacks the phone and connects it to the network (or do a factory reset on the device)&lt;br /&gt;
* The phone looks for the configuration and when it has finished the user should be able to make calls&lt;br /&gt;
&lt;br /&gt;
At the end:&lt;br /&gt;
* A new app must have been added to the home screen&lt;br /&gt;
* A new device must have been added to the user object (this can be checked on Users Admin or on the PBX)&lt;br /&gt;
* A new entry for the given device must have been added on the Devices tab of the Provisioning App&lt;br /&gt;
* The device must have been added to the Devices App&lt;br /&gt;
&lt;br /&gt;
==User interface==&lt;br /&gt;
[[Image: Yealink RPS history.jpg|thumb|upright=1.0|right|yealink_rps_history.jpg/|yealink_rps_history.jpg/]]&lt;br /&gt;
[[Image: Yealink Devices.jpg|thumb|upright=1.0|right|yealink_devices.jpg/|yealink_devices.jpg/]]&lt;br /&gt;
In the user interface of the administrator app there are 2 tabs: RPS history and Devices.&lt;br /&gt;
&lt;br /&gt;
On the &#039;&#039;&#039;RPS history&#039;&#039;&#039; tab, the history of the comunication between the app and the Yealink RPS can be seen. Here the commands sent from the app to the Yealink RPS with their answers are displayed. To be considered:&lt;br /&gt;
* Everytime the app starts, an &#039;&#039;&#039;ADD SERVER&#039;&#039;&#039; command is sent to register the URL of the app to the server name. After the first start of the app, this command will be always answered with &#039;&#039;&#039;Error: The server name has been used&#039;&#039;&#039; because the URL was already registered the first time.&lt;br /&gt;
* Every time a phone is provisioned, first a &#039;&#039;&#039;DEREGISTER DEVICE&#039;&#039;&#039; command is sent to remove it from the RPS if the phone has already been provisioned before. Then a &#039;&#039;&#039;REDIRECT DEVICE&#039;&#039;&#039; command is sent to redirect the config requests from the phone to the app. If the phone has not already been provisioned before, the first command will be answered with &#039;&#039;&#039;Error: Invalid MAC(s)&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
On the &#039;&#039;&#039;Devices&#039;&#039;&#039; tab, the list of all the devices provisioned by the app and their status are displayed. To be considered:&lt;br /&gt;
* If a phone is not on the list, the device data has not been received by the app.&lt;br /&gt;
* If the value of the &#039;&#039;&#039;Device Config&#039;&#039;&#039; column is not &#039;&#039;&#039;Config Received&#039;&#039;&#039;, then the sysclient Connection between Devices App and the Provisioning App has not been set or the configuration has not been received.&lt;br /&gt;
* If the value of the &#039;&#039;&#039;Phone Requests&#039;&#039;&#039; column is not &#039;&#039;&#039;Provisioned&#039;&#039;&#039;, that means that the phone has still not requested the config file to the app. In this case, a Factory Reset should be done on the phone.&lt;br /&gt;
* On the &#039;&#039;&#039;Last Config Request&#039;&#039;&#039; column, the timestamp of the last config request done by the phone is displayed.&lt;br /&gt;
&lt;br /&gt;
==Known issues==&lt;br /&gt;
[[Image: Yealink trusted certificates.jpg|thumb|upright=1.0|right|yealink_trusted_certificates.jpg/|yealink_trusted_certificates.jpg/]]&lt;br /&gt;
It the phone configuration has been received but after a factory reset no phone requests have been received, you may need to disable the security certificates in the Yealink phone web interface under Security&amp;gt;Trusted Certificates:&lt;br /&gt;
* Only Accept Trusted Certificates -&amp;gt; Disabled&lt;br /&gt;
* Common Name Validation -&amp;gt; Disabled&lt;br /&gt;
* CA Certificates -&amp;gt; All Certificates&lt;br /&gt;
&lt;br /&gt;
==Related Articles==&lt;br /&gt;
* [[Howto:Deploy Yealink Devices on myApps|Deploy Yealink Devices]]&lt;br /&gt;
* [[Howto:Yealink IP phones - Yealink - 3rd Party Product|Yealink Devices Compatibility]]&lt;br /&gt;
&lt;br /&gt;
* SDK Integration (if the content is available)&lt;/div&gt;</summary>
		<author><name>Nfi</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=File:RPS-account.png&amp;diff=74515</id>
		<title>File:RPS-account.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=File:RPS-account.png&amp;diff=74515"/>
		<updated>2024-12-18T18:18:29Z</updated>

		<summary type="html">&lt;p&gt;Nfi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;RPS Account&lt;/div&gt;</summary>
		<author><name>Nfi</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Reference13r1:Concept_App_Service_Yealink&amp;diff=74514</id>
		<title>Reference13r1:Concept App Service Yealink</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Reference13r1:Concept_App_Service_Yealink&amp;diff=74514"/>
		<updated>2024-12-18T17:27:53Z</updated>

		<summary type="html">&lt;p&gt;Nfi: /* Yealink App (innovaphone-yealink) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Concept|Apps]]&lt;br /&gt;
The Provisioning App for Yealink is an App Service which can be installed on an innovaphone App Platform and is used to easily provision Yealink SIP devices with myApps. This enables the user to easily set up a Yealink SIP device via his profile. &#039;&#039;The administrator also has the possibility to set up a Yealink SIP device for a user via UsersAdmin.&#039;&#039;&lt;br /&gt;
When a Yealink phone is provisioned on Profile &#039;&#039;or UsersAdmin&#039;&#039;, the Yealink App connects to the Yealink Redirect To Provisioning Server (RPS) and redirects the phone to the Yealink App on the customer App Platform, where the config files will be requested afterwards. These config files are generated on the Yealink App with user data received from Users and device configuration data received from Devices.&lt;br /&gt;
== Applies To == &lt;br /&gt;
&lt;br /&gt;
* innovaphone PBX from version 13r1sr18&lt;br /&gt;
&lt;br /&gt;
==Requirements==&lt;br /&gt;
* innovaphone PBX&lt;br /&gt;
* innovaphone Application Platform&lt;br /&gt;
* Firmware V13r1xx&lt;br /&gt;
* Devices App&lt;br /&gt;
* Profile App&lt;br /&gt;
* Users Admin App&lt;br /&gt;
* MAC address of the Yealink Device (usually on the back of the device)&lt;br /&gt;
&lt;br /&gt;
== Apps ==&lt;br /&gt;
=== Yealink App (innovaphone-yealink) ===&lt;br /&gt;
[[Image: Yealink-App.png|yealink-app.png/|yealink-app.png/]]&lt;br /&gt;
This is an App, where the administrator can check the communication between the RPS and the Provisioning App.&lt;br /&gt;
&lt;br /&gt;
Also some config items can be edited on the hamburguer menu:&lt;br /&gt;
&lt;br /&gt;
* RPS account (We recommend that you use your own account. You will receive your own login credentials from your official Yealink distributor. &#039;&#039;&#039;The default login credentials should only be used for testing purposes.&#039;&#039;&#039;)&lt;br /&gt;
* Interval for phone updates&lt;br /&gt;
* Timeserver and timezone&lt;br /&gt;
* SIP protocol (TCP or TLS)&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
;Websocket: to get the URL of the app, so the phones can be redirected&lt;br /&gt;
;Admin: to be able to edit the device on the User object&lt;br /&gt;
;Services: needed to use the Devices API (com.innovaphone.devices), so the phone configuration can be received&lt;br /&gt;
;Devices-API: gives access to the Devices App, which is needed for the provisioning of phones&lt;br /&gt;
&lt;br /&gt;
Parameters for Profile App Object:&lt;br /&gt;
&lt;br /&gt;
;Yealink: gives access to the Provisioning App, which is needed for the provisioning of phones&lt;br /&gt;
&lt;br /&gt;
== PBX Manager Plugins ==&lt;br /&gt;
&lt;br /&gt;
=== Yealink ===&lt;br /&gt;
&lt;br /&gt;
With the Yealink plugin App Objects can be created, edited and deleted on the PBX.&lt;br /&gt;
&lt;br /&gt;
==Configuration==&lt;br /&gt;
* Download the Provisioning App for Yealink via App Store.&lt;br /&gt;
* Install the App on the App Platform Manager.&lt;br /&gt;
* Create a instance for the Provisioning App for Yealink on the App Platform Manager.&lt;br /&gt;
* Create a new PBX Object with the PBX Manager Plugin.&lt;br /&gt;
* Assign App to authorized (admin) users, which will be allowed to open the Admin UI of the Provisioning App.&lt;br /&gt;
* Set access in the Profile App Object in the advanced UI to the Provisioning App for Yealink. This gives access to the Provisioning App for Yealink, which is needed for the provisioning of phones.&lt;br /&gt;
&lt;br /&gt;
Do not forget to check the default configuration on the hamburguer menu of the Provisioning App. There it is possible to set:&lt;br /&gt;
* Your own RPS account&lt;br /&gt;
* The interval when the phone must ask  for updates&lt;br /&gt;
* The default device configuration parameters (only updated when then phone requests the configuration)&lt;br /&gt;
** NTP server&lt;br /&gt;
** Timezone&lt;br /&gt;
** Location&lt;br /&gt;
** Media Relay (Set [[Reference13r2:PBX/Objects#Devices Config Flags|Media Relay Flag]] &#039;&#039;&#039;on the HW-ID of the PBX user object&#039;&#039;&#039; and disable ICE on the phone, &#039;&#039;&#039;DO NOT set media relay for the whole pbx!!!&#039;&#039;&#039;)&lt;br /&gt;
** TLS (To use SIP/TLS for registration, you have to put the root certificate (Yealink Equipment Issuing CA or Yealink Root CA) for devices from Yealink in the trust list of the Reverse Proxy and PBX. Please ask Yealink for this Yealink Equipment Issuing CA certificate or Yealink Root CA.)&lt;br /&gt;
** HTTPS (This defines if the Provisioning URL configured on the Phone must be HTTP or HTTPS)&lt;br /&gt;
&lt;br /&gt;
Also refer to [[Howto:Deploy Yealink Devices on myApps|this illustrated configuration document]] on how to deploy Yealink devices.&lt;br /&gt;
&lt;br /&gt;
==Provisioning workflow==&lt;br /&gt;
[[Image: Yealink workflow.jpg|thumb|upright=1.0|right|yealink_workflow.jpg/|yealink_workflow.jpg/]]&lt;br /&gt;
First of all, when the App starts running it &#039;&#039;&#039;publishes a Provisioning API&#039;&#039;&#039; (&#039;&#039;com.innovaphone.provisioning&#039;&#039;), so that the Profile App and Users Admin App will be able to find it as provider. For this Profile and Users Admin must be able to access the Provisioning App, which can be configured on each App Object on the PBX. This is also automatically configured on the PBX Manager when adding or editing a Provisioning App Object. The Provisioning App also registers its URL with a server name (which is usually the 24 first characters of the domain name) on the Yealink RPS everytime the app service starts, which will be used to redirect the devices afterwards.&lt;br /&gt;
&lt;br /&gt;
On &#039;&#039;&#039;Profile&#039;&#039;&#039; (or Users Admin) the provisioning of a new phone is started and it looks for the Provisioning APIs that have been published. The user must select which one is the right one for the given phone (in this case Yealink) because there could be more than one manufacturer. Afterwards, the provisioning categories and the provisioning code are requested to Devices and saved on the Users Service. Then the &#039;&#039;&#039;MAC address&#039;&#039;&#039; must be entered on Profile. This with the provisioning code (and also other user-related data like username) is sent from Users to the Provisioning App.&lt;br /&gt;
&lt;br /&gt;
Next the Provisioning App opens a &#039;&#039;&#039;Sysclient&#039;&#039;&#039; connection and when it is set Devices sends the configuration for the phone through the Sysclient connection. This connection remains opened and it is used to receive configuration updates. &lt;br /&gt;
&lt;br /&gt;
Finally the phone is redirected on the &#039;&#039;&#039;Yealink RPS&#039;&#039;&#039;, which will redirect the phone to the Provisioning App when it requests for the configuration. This can be triggered it by doing a Factory Reset. The phone requests the configuration by sending a GET request to the app, which will be answered with the &#039;&#039;&#039;configuration file&#039;&#039;&#039;. If an &#039;&#039;&#039;update timeout&#039;&#039;&#039; has been defined on the Yealink App, the phone will keep requesting for a new configuration file periodically to the Provisioning App. After the configuration file has been sent, the &#039;&#039;&#039;device&#039;&#039;&#039; on the user object is edited to update the Media Relay, TLS only and Reverse Proxy flags.&lt;br /&gt;
&lt;br /&gt;
==How to provision a device==&lt;br /&gt;
Yealink devices can be added by provisioning a new phone but selecting Yealink instead of innovaphone as the manufacturer. From a user point of view this should work as follows:&lt;br /&gt;
* Open myApps/Profile/My phones and select &amp;quot;&#039;&#039;&#039;+ Phone&#039;&#039;&#039;&amp;quot; to add a new device&lt;br /&gt;
* Then choose the manufacturer of the phone, in this case &#039;&#039;&#039;Yealink&#039;&#039;&#039;&lt;br /&gt;
* A drop down is displayed to select a &#039;&#039;&#039;category&#039;&#039;&#039;&lt;br /&gt;
* Enter the &#039;&#039;&#039;MAC&#039;&#039;&#039; address of the Yealink device (must be entered without &amp;quot;:&amp;quot; or &amp;quot;-&amp;quot;)&lt;br /&gt;
* Enter a &#039;&#039;&#039;name&#039;&#039;&#039; for this device, which will be the name of the app displayed on the home screen afterwards&lt;br /&gt;
* Unpacks the phone and connects it to the network (or do a factory reset on the device)&lt;br /&gt;
* The phone looks for the configuration and when it has finished the user should be able to make calls&lt;br /&gt;
&lt;br /&gt;
At the end:&lt;br /&gt;
* A new app must have been added to the home screen&lt;br /&gt;
* A new device must have been added to the user object (this can be checked on Users Admin or on the PBX)&lt;br /&gt;
* A new entry for the given device must have been added on the Devices tab of the Provisioning App&lt;br /&gt;
* The device must have been added to the Devices App&lt;br /&gt;
&lt;br /&gt;
==User interface==&lt;br /&gt;
[[Image: Yealink RPS history.jpg|thumb|upright=1.0|right|yealink_rps_history.jpg/|yealink_rps_history.jpg/]]&lt;br /&gt;
[[Image: Yealink Devices.jpg|thumb|upright=1.0|right|yealink_devices.jpg/|yealink_devices.jpg/]]&lt;br /&gt;
In the user interface of the administrator app there are 2 tabs: RPS history and Devices.&lt;br /&gt;
&lt;br /&gt;
On the &#039;&#039;&#039;RPS history&#039;&#039;&#039; tab, the history of the comunication between the app and the Yealink RPS can be seen. Here the commands sent from the app to the Yealink RPS with their answers are displayed. To be considered:&lt;br /&gt;
* Everytime the app starts, an &#039;&#039;&#039;ADD SERVER&#039;&#039;&#039; command is sent to register the URL of the app to the server name. After the first start of the app, this command will be always answered with &#039;&#039;&#039;Error: The server name has been used&#039;&#039;&#039; because the URL was already registered the first time.&lt;br /&gt;
* Every time a phone is provisioned, first a &#039;&#039;&#039;DEREGISTER DEVICE&#039;&#039;&#039; command is sent to remove it from the RPS if the phone has already been provisioned before. Then a &#039;&#039;&#039;REDIRECT DEVICE&#039;&#039;&#039; command is sent to redirect the config requests from the phone to the app. If the phone has not already been provisioned before, the first command will be answered with &#039;&#039;&#039;Error: Invalid MAC(s)&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
On the &#039;&#039;&#039;Devices&#039;&#039;&#039; tab, the list of all the devices provisioned by the app and their status are displayed. To be considered:&lt;br /&gt;
* If a phone is not on the list, the device data has not been received by the app.&lt;br /&gt;
* If the value of the &#039;&#039;&#039;Device Config&#039;&#039;&#039; column is not &#039;&#039;&#039;Config Received&#039;&#039;&#039;, then the sysclient Connection between Devices App and the Provisioning App has not been set or the configuration has not been received.&lt;br /&gt;
* If the value of the &#039;&#039;&#039;Phone Requests&#039;&#039;&#039; column is not &#039;&#039;&#039;Provisioned&#039;&#039;&#039;, that means that the phone has still not requested the config file to the app. In this case, a Factory Reset should be done on the phone.&lt;br /&gt;
* On the &#039;&#039;&#039;Last Config Request&#039;&#039;&#039; column, the timestamp of the last config request done by the phone is displayed.&lt;br /&gt;
&lt;br /&gt;
==Known issues==&lt;br /&gt;
[[Image: Yealink trusted certificates.jpg|thumb|upright=1.0|right|yealink_trusted_certificates.jpg/|yealink_trusted_certificates.jpg/]]&lt;br /&gt;
It the phone configuration has been received but after a factory reset no phone requests have been received, you may need to disable the security certificates in the Yealink phone web interface under Security&amp;gt;Trusted Certificates:&lt;br /&gt;
* Only Accept Trusted Certificates -&amp;gt; Disabled&lt;br /&gt;
* Common Name Validation -&amp;gt; Disabled&lt;br /&gt;
* CA Certificates -&amp;gt; All Certificates&lt;br /&gt;
&lt;br /&gt;
==Related Articles==&lt;br /&gt;
* [[Howto:Deploy Yealink Devices on myApps|Deploy Yealink Devices]]&lt;br /&gt;
* [[Howto:Yealink IP phones - Yealink - 3rd Party Product|Yealink Devices Compatibility]]&lt;br /&gt;
&lt;br /&gt;
* SDK Integration (if the content is available)&lt;/div&gt;</summary>
		<author><name>Nfi</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Reference13r1:Concept_App_Service_Yealink&amp;diff=74513</id>
		<title>Reference13r1:Concept App Service Yealink</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Reference13r1:Concept_App_Service_Yealink&amp;diff=74513"/>
		<updated>2024-12-18T17:27:18Z</updated>

		<summary type="html">&lt;p&gt;Nfi: /* Yealink App (innovaphone-yealink) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Concept|Apps]]&lt;br /&gt;
The Provisioning App for Yealink is an App Service which can be installed on an innovaphone App Platform and is used to easily provision Yealink SIP devices with myApps. This enables the user to easily set up a Yealink SIP device via his profile. &#039;&#039;The administrator also has the possibility to set up a Yealink SIP device for a user via UsersAdmin.&#039;&#039;&lt;br /&gt;
When a Yealink phone is provisioned on Profile &#039;&#039;or UsersAdmin&#039;&#039;, the Yealink App connects to the Yealink Redirect To Provisioning Server (RPS) and redirects the phone to the Yealink App on the customer App Platform, where the config files will be requested afterwards. These config files are generated on the Yealink App with user data received from Users and device configuration data received from Devices.&lt;br /&gt;
== Applies To == &lt;br /&gt;
&lt;br /&gt;
* innovaphone PBX from version 13r1sr18&lt;br /&gt;
&lt;br /&gt;
==Requirements==&lt;br /&gt;
* innovaphone PBX&lt;br /&gt;
* innovaphone Application Platform&lt;br /&gt;
* Firmware V13r1xx&lt;br /&gt;
* Devices App&lt;br /&gt;
* Profile App&lt;br /&gt;
* Users Admin App&lt;br /&gt;
* MAC address of the Yealink Device (usually on the back of the device)&lt;br /&gt;
&lt;br /&gt;
== Apps ==&lt;br /&gt;
=== Yealink App (innovaphone-yealink) ===&lt;br /&gt;
[[Image: Yealink-App.png|yealink-app.png/]]&lt;br /&gt;
This is an App, where the administrator can check the communication between the RPS and the Provisioning App.&lt;br /&gt;
&lt;br /&gt;
Also some config items can be edited on the hamburguer menu:&lt;br /&gt;
&lt;br /&gt;
* RPS account (We recommend that you use your own account. You will receive your own login credentials from your official Yealink distributor. The default login credentials should only be used for testing purposes.)&lt;br /&gt;
* Interval for phone updates&lt;br /&gt;
* Timeserver and timezone&lt;br /&gt;
* SIP protocol (TCP or TLS)&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
;Websocket: to get the URL of the app, so the phones can be redirected&lt;br /&gt;
;Admin: to be able to edit the device on the User object&lt;br /&gt;
;Services: needed to use the Devices API (com.innovaphone.devices), so the phone configuration can be received&lt;br /&gt;
;Devices-API: gives access to the Devices App, which is needed for the provisioning of phones&lt;br /&gt;
&lt;br /&gt;
Parameters for Profile App Object:&lt;br /&gt;
&lt;br /&gt;
;Yealink: gives access to the Provisioning App, which is needed for the provisioning of phones&lt;br /&gt;
&lt;br /&gt;
== PBX Manager Plugins ==&lt;br /&gt;
&lt;br /&gt;
=== Yealink ===&lt;br /&gt;
&lt;br /&gt;
With the Yealink plugin App Objects can be created, edited and deleted on the PBX.&lt;br /&gt;
&lt;br /&gt;
==Configuration==&lt;br /&gt;
* Download the Provisioning App for Yealink via App Store.&lt;br /&gt;
* Install the App on the App Platform Manager.&lt;br /&gt;
* Create a instance for the Provisioning App for Yealink on the App Platform Manager.&lt;br /&gt;
* Create a new PBX Object with the PBX Manager Plugin.&lt;br /&gt;
* Assign App to authorized (admin) users, which will be allowed to open the Admin UI of the Provisioning App.&lt;br /&gt;
* Set access in the Profile App Object in the advanced UI to the Provisioning App for Yealink. This gives access to the Provisioning App for Yealink, which is needed for the provisioning of phones.&lt;br /&gt;
&lt;br /&gt;
Do not forget to check the default configuration on the hamburguer menu of the Provisioning App. There it is possible to set:&lt;br /&gt;
* Your own RPS account&lt;br /&gt;
* The interval when the phone must ask  for updates&lt;br /&gt;
* The default device configuration parameters (only updated when then phone requests the configuration)&lt;br /&gt;
** NTP server&lt;br /&gt;
** Timezone&lt;br /&gt;
** Location&lt;br /&gt;
** Media Relay (Set [[Reference13r2:PBX/Objects#Devices Config Flags|Media Relay Flag]] &#039;&#039;&#039;on the HW-ID of the PBX user object&#039;&#039;&#039; and disable ICE on the phone, &#039;&#039;&#039;DO NOT set media relay for the whole pbx!!!&#039;&#039;&#039;)&lt;br /&gt;
** TLS (To use SIP/TLS for registration, you have to put the root certificate (Yealink Equipment Issuing CA or Yealink Root CA) for devices from Yealink in the trust list of the Reverse Proxy and PBX. Please ask Yealink for this Yealink Equipment Issuing CA certificate or Yealink Root CA.)&lt;br /&gt;
** HTTPS (This defines if the Provisioning URL configured on the Phone must be HTTP or HTTPS)&lt;br /&gt;
&lt;br /&gt;
Also refer to [[Howto:Deploy Yealink Devices on myApps|this illustrated configuration document]] on how to deploy Yealink devices.&lt;br /&gt;
&lt;br /&gt;
==Provisioning workflow==&lt;br /&gt;
[[Image: Yealink workflow.jpg|thumb|upright=1.0|right|Provisioning App Workflow|yealink_workflow.jpg/]]&lt;br /&gt;
First of all, when the App starts running it &#039;&#039;&#039;publishes a Provisioning API&#039;&#039;&#039; (&#039;&#039;com.innovaphone.provisioning&#039;&#039;), so that the Profile App and Users Admin App will be able to find it as provider. For this Profile and Users Admin must be able to access the Provisioning App, which can be configured on each App Object on the PBX. This is also automatically configured on the PBX Manager when adding or editing a Provisioning App Object. The Provisioning App also registers its URL with a server name (which is usually the 24 first characters of the domain name) on the Yealink RPS everytime the app service starts, which will be used to redirect the devices afterwards.&lt;br /&gt;
&lt;br /&gt;
On &#039;&#039;&#039;Profile&#039;&#039;&#039; (or Users Admin) the provisioning of a new phone is started and it looks for the Provisioning APIs that have been published. The user must select which one is the right one for the given phone (in this case Yealink) because there could be more than one manufacturer. Afterwards, the provisioning categories and the provisioning code are requested to Devices and saved on the Users Service. Then the &#039;&#039;&#039;MAC address&#039;&#039;&#039; must be entered on Profile. This with the provisioning code (and also other user-related data like username) is sent from Users to the Provisioning App.&lt;br /&gt;
&lt;br /&gt;
Next the Provisioning App opens a &#039;&#039;&#039;Sysclient&#039;&#039;&#039; connection and when it is set Devices sends the configuration for the phone through the Sysclient connection. This connection remains opened and it is used to receive configuration updates. &lt;br /&gt;
&lt;br /&gt;
Finally the phone is redirected on the &#039;&#039;&#039;Yealink RPS&#039;&#039;&#039;, which will redirect the phone to the Provisioning App when it requests for the configuration. This can be triggered it by doing a Factory Reset. The phone requests the configuration by sending a GET request to the app, which will be answered with the &#039;&#039;&#039;configuration file&#039;&#039;&#039;. If an &#039;&#039;&#039;update timeout&#039;&#039;&#039; has been defined on the Yealink App, the phone will keep requesting for a new configuration file periodically to the Provisioning App. After the configuration file has been sent, the &#039;&#039;&#039;device&#039;&#039;&#039; on the user object is edited to update the Media Relay, TLS only and Reverse Proxy flags.&lt;br /&gt;
&lt;br /&gt;
==How to provision a device==&lt;br /&gt;
Yealink devices can be added by provisioning a new phone but selecting Yealink instead of innovaphone as the manufacturer. From a user point of view this should work as follows:&lt;br /&gt;
* Open myApps/Profile/My phones and select &amp;quot;&#039;&#039;&#039;+ Phone&#039;&#039;&#039;&amp;quot; to add a new device&lt;br /&gt;
* Then choose the manufacturer of the phone, in this case &#039;&#039;&#039;Yealink&#039;&#039;&#039;&lt;br /&gt;
* A drop down is displayed to select a &#039;&#039;&#039;category&#039;&#039;&#039;&lt;br /&gt;
* Enter the &#039;&#039;&#039;MAC&#039;&#039;&#039; address of the Yealink device (must be entered without &amp;quot;:&amp;quot; or &amp;quot;-&amp;quot;)&lt;br /&gt;
* Enter a &#039;&#039;&#039;name&#039;&#039;&#039; for this device, which will be the name of the app displayed on the home screen afterwards&lt;br /&gt;
* Unpacks the phone and connects it to the network (or do a factory reset on the device)&lt;br /&gt;
* The phone looks for the configuration and when it has finished the user should be able to make calls&lt;br /&gt;
&lt;br /&gt;
At the end:&lt;br /&gt;
* A new app must have been added to the home screen&lt;br /&gt;
* A new device must have been added to the user object (this can be checked on Users Admin or on the PBX)&lt;br /&gt;
* A new entry for the given device must have been added on the Devices tab of the Provisioning App&lt;br /&gt;
* The device must have been added to the Devices App&lt;br /&gt;
&lt;br /&gt;
==User interface==&lt;br /&gt;
[[Image: Yealink RPS history.jpg|thumb|upright=1.0|right|RPS history tab|yealink_rps_history.jpg/]]&lt;br /&gt;
[[Image: Yealink Devices.jpg|thumb|upright=1.0|right|Devices tab|yealink_devices.jpg/]]&lt;br /&gt;
In the user interface of the administrator app there are 2 tabs: RPS history and Devices.&lt;br /&gt;
&lt;br /&gt;
On the &#039;&#039;&#039;RPS history&#039;&#039;&#039; tab, the history of the comunication between the app and the Yealink RPS can be seen. Here the commands sent from the app to the Yealink RPS with their answers are displayed. To be considered:&lt;br /&gt;
* Everytime the app starts, an &#039;&#039;&#039;ADD SERVER&#039;&#039;&#039; command is sent to register the URL of the app to the server name. After the first start of the app, this command will be always answered with &#039;&#039;&#039;Error: The server name has been used&#039;&#039;&#039; because the URL was already registered the first time.&lt;br /&gt;
* Every time a phone is provisioned, first a &#039;&#039;&#039;DEREGISTER DEVICE&#039;&#039;&#039; command is sent to remove it from the RPS if the phone has already been provisioned before. Then a &#039;&#039;&#039;REDIRECT DEVICE&#039;&#039;&#039; command is sent to redirect the config requests from the phone to the app. If the phone has not already been provisioned before, the first command will be answered with &#039;&#039;&#039;Error: Invalid MAC(s)&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
On the &#039;&#039;&#039;Devices&#039;&#039;&#039; tab, the list of all the devices provisioned by the app and their status are displayed. To be considered:&lt;br /&gt;
* If a phone is not on the list, the device data has not been received by the app.&lt;br /&gt;
* If the value of the &#039;&#039;&#039;Device Config&#039;&#039;&#039; column is not &#039;&#039;&#039;Config Received&#039;&#039;&#039;, then the sysclient Connection between Devices App and the Provisioning App has not been set or the configuration has not been received.&lt;br /&gt;
* If the value of the &#039;&#039;&#039;Phone Requests&#039;&#039;&#039; column is not &#039;&#039;&#039;Provisioned&#039;&#039;&#039;, that means that the phone has still not requested the config file to the app. In this case, a Factory Reset should be done on the phone.&lt;br /&gt;
* On the &#039;&#039;&#039;Last Config Request&#039;&#039;&#039; column, the timestamp of the last config request done by the phone is displayed.&lt;br /&gt;
&lt;br /&gt;
==Known issues==&lt;br /&gt;
[[Image: Yealink trusted certificates.jpg|thumb|upright=1.0|right|Trusted Certificates|yealink_trusted_certificates.jpg/]]&lt;br /&gt;
It the phone configuration has been received but after a factory reset no phone requests have been received, you may need to disable the security certificates in the Yealink phone web interface under Security&amp;gt;Trusted Certificates:&lt;br /&gt;
* Only Accept Trusted Certificates -&amp;gt; Disabled&lt;br /&gt;
* Common Name Validation -&amp;gt; Disabled&lt;br /&gt;
* CA Certificates -&amp;gt; All Certificates&lt;br /&gt;
&lt;br /&gt;
==Related Articles==&lt;br /&gt;
* [[Howto:Deploy Yealink Devices on myApps|Deploy Yealink Devices]]&lt;br /&gt;
* [[Howto:Yealink IP phones - Yealink - 3rd Party Product|Yealink Devices Compatibility]]&lt;br /&gt;
&lt;br /&gt;
* SDK Integration (if the content is available)&lt;/div&gt;</summary>
		<author><name>Nfi</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Reference14r2:Concept_myApps_platform_services&amp;diff=73556</id>
		<title>Reference14r2:Concept myApps platform services</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Reference14r2:Concept_myApps_platform_services&amp;diff=73556"/>
		<updated>2024-09-17T16:23:00Z</updated>

		<summary type="html">&lt;p&gt;Nfi: /* Device handling */&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/video/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]]&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 12 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, video and data ===&lt;br /&gt;
The RTP service provides audio, video and data (app sharing) 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 || 50100 -&amp;gt; 50199&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| data || 50200 -&amp;gt; 50299&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 1280x720 if available.  Otherwise, 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 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 ware 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.12.2.0 || 13r3sr9&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;C:\Users\...\AppData\Roaming\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]].&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]] [[Image: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]]&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 [[Course13:IT Connect - 10.1 Push Object | 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]] 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;C:\Users\...\AppData\Local\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;
&amp;lt;code&amp;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;
 }&amp;lt;/code&amp;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]]&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]]&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]]&lt;br /&gt;
::[[Image:myapps-settings.png]] [[Image:myapps-settings2.png]] [[Image: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 URL&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;
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;code&amp;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;&amp;lt;/code&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;code&amp;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;&amp;lt;/code&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;
&amp;lt;code&amp;gt;&amp;gt; defaults write com.innovaphone.client-ios-14r1 server &amp;quot;PBX-server-URL&amp;quot;&amp;lt;/code&amp;gt;&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;
=== 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] for details.&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;C:\Users\[UserName]\AppData\Local\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;%ALLUSERSPROFILE%\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]]&lt;br /&gt;
* [[{{NAMESPACE}}:Concept_myApps_Office_Integration]]&lt;br /&gt;
* [[{{NAMESPACE}}:Concept_myAPPs_Search_in_local-Outlook_Contacts]]&lt;br /&gt;
* [[{{NAMESPACE}}:Call_Detail_Record_CDR_PBX]]&lt;br /&gt;
* [[{{NAMESPACE}}: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>Nfi</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Reference13r3:Gateway/GK/GW&amp;diff=68248</id>
		<title>Reference13r3:Gateway/GK/GW</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Reference13r3:Gateway/GK/GW&amp;diff=68248"/>
		<updated>2023-07-27T10:01:14Z</updated>

		<summary type="html">&lt;p&gt;Nfi: Created page with &amp;quot;Below is an overview of all the gateway&amp;#039;s configurable VoIP interfaces: * &amp;#039;&amp;#039;&amp;#039;Interface:&amp;#039;&amp;#039;&amp;#039; The name of the interface. Clicking this name opens a popup page, on which all settings can be made. The settings are described in more detail in the following chapter &amp;quot;Administration/Gateway/VOIP/Interface (VoIP interfaces)&amp;quot;. * &amp;#039;&amp;#039;&amp;#039;CGPN In, CDPN In, CGPN Out, CDPN Out:&amp;#039;&amp;#039;&amp;#039; Precise details on CGPN In, CDPN In, CGPN Out and CDPN Out mappings are co...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Below is an overview of all the gateway&#039;s configurable VoIP interfaces:&lt;br /&gt;
* &#039;&#039;&#039;Interface:&#039;&#039;&#039; The name of the interface. Clicking this name opens a popup page, on which all settings can be made. The settings are described in more detail in the following chapter &amp;quot;[[#Interface_.28VoIP_Interfaces.29|Administration/Gateway/VOIP/Interface (VoIP interfaces)]]&amp;quot;.&lt;br /&gt;
* &#039;&#039;&#039;CGPN In, CDPN In, CGPN Out, CDPN Out:&#039;&#039;&#039; Precise details on CGPN In, CDPN In, CGPN Out and CDPN Out mappings are contained in the chapter entitled &amp;quot;[[#CGPN.2FCDPN_Mappings|Administration/Gateway/Interfaces/CGPN-CDPN Mappings]]&amp;quot; further up in the text.&lt;br /&gt;
* &#039;&#039;&#039;Registration:&#039;&#039;&#039; If a terminal has successfully registered with a gateway, then this is indicated in this column through specification of the IP address &amp;lt;Name of the VoIP interface:Call number:IP address&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Interface (VoIP Interfaces) ==&lt;br /&gt;
Clicking the relevant VoIP interface (GW1-12 &amp;lt;Name of the VoIP interface&amp;gt;) in the Interface column opens a popup page, on which the VoIP interfaces can be individually configured. Like the PBX objects, this popup page also contains standard entry fields that occur, more or less, in all VoIP interfaces.&lt;br /&gt;
&lt;br /&gt;
These standard fields are:&lt;br /&gt;
* &#039;&#039;&#039;Name:&#039;&#039;&#039; The descriptive name of the VoIP interface.&lt;br /&gt;
* &#039;&#039;&#039;Disable:&#039;&#039;&#039; A checked check box disables the relevant VoIP interface.&lt;br /&gt;
* &#039;&#039;&#039;Protocol:&#039;&#039;&#039; The protocol to be used, that is, H.323 or SIP. Depending on which protocol is used, the set-up of the entry fields changes.&lt;br /&gt;
* &#039;&#039;&#039;Mode:&#039;&#039;&#039; Describes the mode of registration. Possible registration modes are:&lt;br /&gt;
# Gateway without Registration - Logs the VoIP interface (gateway) on to the configured gatekeeper without a registration.&lt;br /&gt;
# Register as Endpoint - Registers a VoIP terminal with the configured gatekeeper.&lt;br /&gt;
# Register as Gateway - Registers a VoIP gateway with the configured gatekeeper.&lt;br /&gt;
# Gatekeeper/Registrar - Is required for managing all gatekeeper registrations on a gateway.&lt;br /&gt;
# ENUM - Is used to register an ENUM connection with the relevant interface.&lt;br /&gt;
* &#039;&#039;&#039;Gatekeeper Address (primary):&#039;&#039;&#039; The primary Gatekeeper IP address at which the terminal or gateway is to register via the relevant interface. Only necessary for modes 2 and 3.&lt;br /&gt;
* &#039;&#039;&#039;Gatekeeper Address (secondary):&#039;&#039;&#039; The alternative gatekeeper IP address at which the terminal or gateway is to register via the relevant interface, if registration with the primary gatekeeper fails. Only necessary for modes 2 and 3 .&lt;br /&gt;
* &#039;&#039;&#039;Local Domain:&#039;&#039;&#039; Replaces the existing system/domain name (for H323 federation only).&lt;br /&gt;
* &#039;&#039;&#039;Mask:&#039;&#039;&#039; By specifying a network mask, incoming calls can be filtered. Specification of the network mask 255.255.0.0 therefore allows incoming calls on the relevant interface for terminals from the IP address range 192.168.0.0 - 192.168.255.255 .&lt;br /&gt;
* &#039;&#039;&#039;Gatekeeper Identifier:&#039;&#039;&#039; It is also sufficient to specify only the gatekeeper ID. Every gatekeeper in a network can be identified by means of its own gatekeeper ID, so that several gatekeepers can be operated in a network, with each terminal nevertheless identifying the correct gatekeeper by means of Gatekeeper Discovery (uses the multicast address 224.0.1.41).&lt;br /&gt;
* &#039;&#039;&#039;STUN SERVER:&#039;&#039;&#039; The STUN server name or IP address must be configured if this device has no public IP address while the SIP server is accessible under a public IP address. The value is given by the SIP provider or administrator (for example, stun.xten.com or 64.69.76.23). You can choose any STUN server; it does not necessarily have to correspond to the one of the SIP provider.&lt;br /&gt;
* &#039;&#039;&#039;Local Signalling Port:&#039;&#039;&#039; Signalling Port used by the Interface.&lt;br /&gt;
* &#039;&#039;&#039;SIP - Register as Gateway/Endpoint:&#039;&#039;&#039; &lt;br /&gt;
** &#039;&#039;&#039;Remote Domain (SIP Only):&#039;&#039;&#039; SIP Domain of the remote SIP Server to register (often equal to the SIP Proxy).&lt;br /&gt;
** &#039;&#039;&#039;Proxy (SIP Only):&#039;&#039;&#039; DNS name or IP address of the SIP proxy where SIP messages (REGISTER,INVITE,etc) are to be sent to. Proxy can be omitted if domain part of AOR can be used as remote signaling destination and it&#039;s set at Remote Domain.&lt;br /&gt;
* &#039;&#039;&#039;SIP - Gateway without Registration:&#039;&#039;&#039; &lt;br /&gt;
** &#039;&#039;&#039;Remote Domain (SIP Only):&#039;&#039;&#039; Check the Domain/IP Address on the SIP URI &amp;quot;FROM&amp;quot; field and removes it if match. &lt;br /&gt;
** &#039;&#039;&#039;Local Domain (SIP Only):&#039;&#039;&#039; Check the Domain/IP Address on the SIP URI &amp;quot;TO&amp;quot; field and removes it if match.&lt;br /&gt;
** &#039;&#039;&#039;Proxy (SIP Only):&#039;&#039;&#039; DNS name or IP address of the SIP proxy where SIP messages (INVITE,etc) are to be sent to, this field it&#039;s mandatory.&lt;br /&gt;
** &#039;&#039;&#039;Filter Incoming Calls (SIP Only):&#039;&#039;&#039; Accept Incoming Call on this interface only if the domain part of the &amp;quot;To:&amp;quot; field SIP URI matches the &#039;&#039;Local Domain&#039;&#039; configured. If not accepted, the call may still be accepted by another interface&lt;br /&gt;
&lt;br /&gt;
=== Authorization section ===&lt;br /&gt;
In the &#039;&#039;&#039;Authorization&#039;&#039;&#039; section, you can store a password for the VoIP interface.&lt;br /&gt;
* &#039;&#039;&#039;Password / Retype:&#039;&#039;&#039; The security of the registration can be raised by specifying a password (Password). The password must be confirmed (Retype).&lt;br /&gt;
&lt;br /&gt;
=== Alias List section ===&lt;br /&gt;
In the &#039;&#039;&#039;Alias List&#039;&#039;&#039; section, you specify the call name (H.323) and the call number (E.164) of the relevant registration. For VoIP end points, you should define the assigned direct dialling number or MSN as the E.164 address, and the name as the H.323 name. For VoIP gateways it is sufficient to define the name.&lt;br /&gt;
* &#039;&#039;&#039;Name:&#039;&#039;&#039; The H.323 name.&lt;br /&gt;
* &#039;&#039;&#039;Number:&#039;&#039;&#039; The E.164 call number.&lt;br /&gt;
&lt;br /&gt;
=== Coder Preferences section ===&lt;br /&gt;
The standard entry fields in the &#039;&#039;&#039;Coder Preferences&#039;&#039;&#039; section were already described in chapter &amp;quot;[[Reference:Administration/Gateway/Interfaces#Interface_.28ISDN.2C_SIP_.26_virtual_interfaces.29|Administration/Gateway/Interfaces/Interface (physical and virtual interfaces)]]&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Media Properties ===&lt;br /&gt;
The standard entry fields in the &#039;&#039;&#039;Media Properties&#039;&#039;&#039; section were already described [[{{NAMESPACE}}:Gateway/Interfaces/Media_Properties | Media Properties]].&lt;br /&gt;
&lt;br /&gt;
=== H.323 Interop Tweaks section ===&lt;br /&gt;
In addition to the standard fields, several advanced settings are available in the &#039;&#039;&#039;H.323 Interop Tweaks&#039;&#039;&#039; section. They are normally not necessary and are merely used to solve compatibility problems with some PBXs:&lt;br /&gt;
* &#039;&#039;&#039;No Faststart:&#039;&#039;&#039; The H.245 faststart procedure is enabled as standard. Outgoing calls are made with faststart, incoming calls with faststart are answered with faststart.&amp;lt;br&amp;gt;A checked check box disables the H.245 faststart procedure. Outgoing calls are made without faststart, incoming calls with and without faststart are answered without faststart.&lt;br /&gt;
* &#039;&#039;&#039;No H.245 Tunneling:&#039;&#039;&#039; The H.245 tunneling procedure is enabled as standard. The voice data connection is negotiated in the TCP signalling connection*) already available. This can be advantageous in connection with NAT and firewalls.&lt;br /&gt;
A checked check box disables the H.245 tunneling procedure, meaning that a separate TCP connection is set up for this negotiation. This applies to the signalling connection leading out of the gatekeeper.&lt;br /&gt;
* &#039;&#039;&#039;Suppress HLC:&#039;&#039;&#039; A checked check box disables the transmission of HLC (High Layer Compatibility) information elements.&lt;br /&gt;
* &#039;&#039;&#039;Suppress FTY:&#039;&#039;&#039; A checked check box disables the transmission of FTY (Facility) information elements.&lt;br /&gt;
* &#039;&#039;&#039;Suppress Subaddress:&#039;&#039;&#039; A checked check box disables the transmission of Subaddress information elements.&lt;br /&gt;
 *) From a technical viewpoint, the H.245 protocol does not establish its own TCP connection, &lt;br /&gt;
 but shares the H.225 TCP connection.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SIP Interop Tweaks section ===&lt;br /&gt;
Miscellaneous interoperability options for SIP.&lt;br /&gt;
{|&lt;br /&gt;
|valign=top nowrap=true|&#039;&#039;&#039;Proposed Registration Interval&#039;&#039;&#039;&lt;br /&gt;
|Set in seconds, default is 120 seconds&lt;br /&gt;
|-&lt;br /&gt;
|valign=top nowrap=true|&#039;&#039;&#039;Accept INVITE&#039;s from Anywhere&#039;&#039;&#039;&lt;br /&gt;
|If disabled, registered interfaces will reject INVITE&#039;s not coming from the SIP server with &amp;quot;305 Use Proxy&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
|valign=top nowrap=true|&#039;&#039;&#039;Enforce Sending Complete&#039;&#039;&#039;&lt;br /&gt;
|Affects handling of &amp;quot;484 Address Incomplete&amp;quot; responses. If enabled and &amp;quot;484 Address Incomplete&amp;quot; is received, the call is cleared. If not enabled and &amp;quot;484 Address Incomplete&amp;quot; is received, the call is retained and re-initiated in case of new dialing digits.&lt;br /&gt;
|-&lt;br /&gt;
|valign=top nowrap=true|&#039;&#039;&#039;No Video&#039;&#039;&#039;&lt;br /&gt;
|Removes Video Capabilities from outgoing media offer.&lt;br /&gt;
|-&lt;br /&gt;
|valign=top nowrap=true|&#039;&#039;&#039;No Early Media&#039;&#039;&#039;&lt;br /&gt;
|Ignore any SDP answer received before final connect response. (Affects only outgoing SIP calls)&lt;br /&gt;
|-&lt;br /&gt;
|valign=top nowrap=true|&#039;&#039;&#039;No Inband Information on Error&#039;&#039;&#039;&lt;br /&gt;
|Controls interworking of Q.931 DISC message. If this option is set, DISC message is always interworked into BYE request.&lt;br /&gt;
|-&lt;br /&gt;
|valign=top nowrap=true|&#039;&#039;&#039;No Inband Disconnect&#039;&#039;&#039;&lt;br /&gt;
|TBD.&lt;br /&gt;
|-&lt;br /&gt;
|valign=top nowrap=true|&#039;&#039;&#039;No Remote Hold Signaling&#039;&#039;&#039;&lt;br /&gt;
|Disables interworking of &amp;quot;inactive&amp;quot; into RemoteHold (affects connected SIP calls only).&lt;br /&gt;
|-&lt;br /&gt;
|valign=top nowrap=true|&#039;&#039;&#039;Take Refer-To URI as Remote Target URI&#039;&#039;&#039;&lt;br /&gt;
|If enabled: When REFER is received and transfer is executed by the Gateway application and a new INVITE is sent, the Request-URI of this INVITE matches the URI that has been received in Refer-To header in REFER.&amp;lt;br/&amp;gt;&lt;br /&gt;
If not enabled: The Request-URI of the outgoing INVITE is created by usual means. Userpart of the Request-URI usually contains the CDPN as provided by Gateway application.&lt;br /&gt;
|-&lt;br /&gt;
|valign=top nowrap=true|&#039;&#039;&#039;To Header when Sending INVITE&#039;&#039;&#039;&lt;br /&gt;
|Affects only outgoing diverted calls . &#039;&#039;&#039;Called Party&#039;&#039;&#039;: If set we write CDPN into To header of outgoing INVITE (and DGPN into History-Info header). &#039;&#039;&#039;Original Called Party&#039;&#039;&#039;: If set we write the DGPN into To header of outgoing INVITE (and CDPN into Request-URI).&lt;br /&gt;
|-&lt;br /&gt;
|valign=top nowrap=true|&#039;&#039;&#039;From Header when Sending INVITE&#039;&#039;&#039;&lt;br /&gt;
|Controls the local URI (From header) of outgoing calls. Applys to registered interfaces only. &#039;&#039;&#039;Fixed AOR&#039;&#039;&#039;: Fixed AOR is used as From-URI regardless of the actual calling party number. &#039;&#039;&#039;AOR with CGPN as Display&#039;&#039;&#039;: Fixed AOR is used as From-URI and calling party number is added as display string. &#039;&#039;&#039;CGPN in user part of URI&#039;&#039;&#039;: Variable From-URI with actual calling party number.&lt;br /&gt;
|-&lt;br /&gt;
|valign=top nowrap=true|&#039;&#039;&#039;Identity Header when Sending INVITE&#039;&#039;&#039;&lt;br /&gt;
|Controls the identity header (P-Preferred-Identity, P-Asserted-Identity and Remote-Party-Id). &#039;&#039;&#039;CGPN in user part of URI&#039;&#039;&#039;: Variable From-URI with actual calling party number. &#039;&#039;&#039;Fixed AOR&#039;&#039;&#039;: Fixed AOR is used as Identity-URI regardless of the actual calling party number.&lt;br /&gt;
|-&lt;br /&gt;
|valign=top nowrap=true|&#039;&#039;&#039;Reliability of Provisional Responses&#039;&#039;&#039;&lt;br /&gt;
|Controls the support of PRACK (RFC-3262). &#039;&#039;&#039;Supported&#039;&#039;&#039;: Supported as optional extension. &#039;&#039;&#039;Required&#039;&#039;&#039;: Required as mandatory extension. &#039;&#039;&#039;Disabled&#039;&#039;&#039;: Hide support for PRACK extension.&lt;br /&gt;
|-&lt;br /&gt;
|valign=top nowrap=true|&#039;&#039;&#039;Microsoft Presence Format&#039;&#039;&#039;&lt;br /&gt;
|Enables special Microsoft Presence format/scheme, only used for SIP Federation with Lync 2013.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== CGPN/CDPN Mappings ==&lt;br /&gt;
A detailed description may be found in the chapter entitled &amp;quot;[[Reference:Administration/Gateway/Interfaces#CGPN.2FCDPN_Mappings|Administration/Gateway/Interface/CGPN-CDPN Mappings]]&amp;quot;.&lt;/div&gt;</summary>
		<author><name>Nfi</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Howto:Guidelines_for_Testing_3rd_Party_SIP_Terminal_Devices&amp;diff=68171</id>
		<title>Howto:Guidelines for Testing 3rd Party SIP Terminal Devices</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Howto:Guidelines_for_Testing_3rd_Party_SIP_Terminal_Devices&amp;diff=68171"/>
		<updated>2023-07-10T14:09:45Z</updated>

		<summary type="html">&lt;p&gt;Nfi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Scope==&lt;br /&gt;
&lt;br /&gt;
innovaphone supports use of 3rd party SIP devices connected to the innovaphone PBX.  In fact, when connecting 3rd party devices, SIP (or SIPS) is the recommended protocol.  We do not recommend to use H.323 for this purpose.&lt;br /&gt;
&lt;br /&gt;
Although innovaphone usually does no 3rd party SIP device compatibility tests, vendors can do them on their own.  Such tests may be documented in our wiki in so-called &#039;&#039;referral product&#039;&#039; pages. See  &#039;&#039;What it means&#039;&#039; in  [[Howto:What_is_a_&amp;quot;3rd_Party_Product&amp;quot;%3F#What_it_means | What is a &amp;quot;3rd Party Product&amp;quot;? ]] for more information on &#039;&#039;referral products&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The 3rd-party-product-vendor or any appropriate partner are &#039;&#039;&#039;exclusively responsible&#039;&#039;&#039; for&lt;br /&gt;
* creation of any testplan&lt;br /&gt;
* definition of detailed teststeps&lt;br /&gt;
* regression testing upon new firmware releases&lt;br /&gt;
* up-to-date documentation of test results&lt;br /&gt;
&lt;br /&gt;
== Things to consider ==&lt;br /&gt;
If you intend to test your device for innovaphone SIP compatibility, here are some notes you should consider &lt;br /&gt;
&lt;br /&gt;
; STUN/TURN [[Reference13r3:Concept_Third_Party_Phones | No longer mandatory since 13r3]] : [https://en.wikipedia.org/wiki/STUN STUN] and [https://en.wikipedia.org/wiki/Traversal_Using_Relays_around_NAT TURN] are required. Although we do not strictly require 3rd party devices to support it, it is needed in cloud and &#039;&#039;anywhere workplace&#039;&#039; scenarios. Failing to support STUN/TURN limits use of the 3rd party device to LAN or VPN scenarios &amp;lt;ref name=&amp;quot;mediarelay&amp;quot;&amp;gt;As of V13r1, it is possible to enforce &#039;&#039;Media Relay&#039;&#039; for individual devices registered to the PBX. This fixes the issue. Due to the imposed CPU load it is recommended for a limited number of devices on a PBX , however&amp;lt;/ref&amp;gt;&lt;br /&gt;
; ICE [[Reference13r3:Concept_Third_Party_Phones | No longer mandatory since 13r3]] : again, for cloud and &#039;&#039;anywhere workplace&#039;&#039; scenarios, we also use [https://en.wikipedia.org/wiki/Interactive_Connectivity_Establishment ICE] as the general mechanism to negotiate the best media connection between 2 devices. As ICE is the supported mechanism to use STUN/TURN, neither would be used properly if ICE is not implemented. For 3rd party devices without ICE support media relay on the PBX must be used, even if TURN is supported&lt;br /&gt;
; DTLS : we do support use of [https://en.wikipedia.org/wiki/Datagram_Transport_Layer_Security DTLS], which is an end-to-end media encryption scheme.  Although we do not strictly require 3rd party devices to support it, it is needed for [https://en.wikipedia.org/wiki/WebRTC WebRTC] compatibility.  3rd party devices which fail to support it will not be able to talk to WebRTC compliant endpoints (i.e. Web Browsers) &amp;lt;ref name=&amp;quot;mediarelay&amp;quot;/&amp;gt;&lt;br /&gt;
; TSIP : (also known as SIP over TCP).  TCP based SIP (optionally encrypted with TLS) is required to route SIP requests through our &#039;&#039;reverse proxy&#039;&#039;.  Therefore, devices supporting SIP/UDP only will not work in such scenarios&lt;br /&gt;
; SIP Offer/Answer Model : with Reverse-Media-Negotiation. This is required for all devices which are registered to the PBX directly.  So this is a requirement for all 3rd party phones at least&lt;br /&gt;
; DTMF : various features in the PBX are controlled via DTMF tones.  Endpoints are required to send DTMF either using RFC  2976 (&#039;&#039;SIP INFO&#039;&#039;) or RFC 2833 (&#039;&#039;RTP DTMF&#039;&#039;).  The PBX will not recognize in-band DTMF audio  tones&lt;br /&gt;
; LDAP : the innovaphone infrastructure relies on [https://en.wikipedia.org/wiki/Lightweight_Directory_Access_Protocol LDAP] for access to directory data.  Although 3rd parties my provide their own contact infrastructure, not supporting LDAP results in an inconsistent user experience&lt;br /&gt;
; CTI : can be tested using a myApps, myPBX, SOAP or TAPI &lt;br /&gt;
:* Initiate outgoing call (automatic call with no manual intervention, update of called party, correct call direction in call list)&lt;br /&gt;
:* Answer incoming call&lt;br /&gt;
:* Hold/Retrieve&lt;br /&gt;
:* Transfer&lt;br /&gt;
&lt;br /&gt;
For more information regarding implemented RFCs, see [[Reference:Supported SIP Features and List of RFC&#039;s]]&lt;br /&gt;
&lt;br /&gt;
; Notes : &amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Creation of a 3rd-party-product article==&lt;br /&gt;
Test results and other informational data concerning the 3rd-pty-product have to be put into the innovaphone wiki according to following standardized format.&lt;br /&gt;
&lt;br /&gt;
* Login to innovaphone wiki&lt;br /&gt;
* Open this instruction in the first browser tab&lt;br /&gt;
* Open a second browser tab/window and paste the following URL into it&lt;br /&gt;
&lt;br /&gt;
 http://wiki.innovaphone.com/index.php?title=Howto:productname_-_companyname_-_3rd_Party_Product&amp;amp;action=edit&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Replace the terms &amp;quot;productname&amp;quot; and &amp;quot;companyname&amp;quot; by your data&amp;lt;/span&amp;gt;&lt;br /&gt;
* Confirm your input by pressing Enter&lt;br /&gt;
* A new empty wiki page titled with the given URL is generated and opened in editor mode&lt;br /&gt;
* Copy the text content from the box below and paste it completely into the empty wiki-page&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;amp;lt;!-- replace CompanyLogo by real logo-name. Do not change size &amp;amp; alignment. Upload image by pressing red link --&amp;amp;gt;&lt;br /&gt;
 [[Image:CompanyLogo.png||200px|right]]&lt;br /&gt;
 &lt;br /&gt;
 ==Product Name==&lt;br /&gt;
 &amp;amp;lt;!-- Mandatory topic. --&amp;amp;gt;&lt;br /&gt;
 &amp;amp;lt;!-- replace CompanyName &amp;amp; ProductName by real names and add URL to productpage --&amp;amp;gt;&lt;br /&gt;
 CompanyName [https://www.linktoproductpage.com ProductName]&lt;br /&gt;
 &lt;br /&gt;
 ==Certification Status==&lt;br /&gt;
 &amp;amp;lt;!-- do not remove comment. Will be done by innovaphone upon document check --&amp;amp;gt;&lt;br /&gt;
 &amp;amp;lt;!-- {{Template:Compat_Status_referral_terminals|manufacturername=Acme Ltd.|certificationdate=in January 1970}} --&amp;amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 ==Category==&lt;br /&gt;
 &amp;amp;lt;!-- Do not change this section and do not remove comments. Will be done by innovaphone upon document check --&amp;amp;gt;&lt;br /&gt;
 &amp;amp;lt;!-- {{Category:3rdParty product categorie to be filled by innovaphone}} --&amp;amp;gt;&lt;br /&gt;
 &amp;amp;lt;!-- [[Category:Referral Product|{{PAGENAME}}]] --&amp;amp;gt;&lt;br /&gt;
 &amp;amp;lt;!-- [[Category:3rdParty product categorie to be filled by innovaphone|{{PAGENAME}}]] --&amp;amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 ==Vendor==&lt;br /&gt;
 &amp;amp;lt;!-- Mandatory topic. --&amp;gt;&lt;br /&gt;
 &amp;amp;lt;!-- Give some introducting words about the vendor itself --&amp;amp;gt;&lt;br /&gt;
 &amp;amp;lt;!-- Place optional company logo. Don&#039;t change logo size. --&amp;amp;gt;&lt;br /&gt;
 [[Image:CompanyLogo.png|150px]] &lt;br /&gt;
 &lt;br /&gt;
 ==Description==&lt;br /&gt;
 &amp;amp;lt;!-- Mandatory topic. --&amp;amp;gt;&lt;br /&gt;
 &amp;amp;lt;!-- Give description about the product, benefits, other information to mention to understand main product purpose --&amp;amp;gt;&lt;br /&gt;
 &amp;amp;lt;!-- place optional product logo or functional overwiew. --&amp;amp;gt; &lt;br /&gt;
 &lt;br /&gt;
 &amp;amp;lt;!-- Some formattings WikiMedia supports:&lt;br /&gt;
 ==Title2==&lt;br /&gt;
 ===Title3===&lt;br /&gt;
 &#039;&#039;&#039;xxx&#039;&#039;&#039; fat text&lt;br /&gt;
 * - list item&lt;br /&gt;
 --&amp;amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;amp;lt;!-- [[Image:ProductLogo.png]] --&amp;amp;gt; &lt;br /&gt;
 &lt;br /&gt;
 &amp;amp;lt;!-- some text --&amp;amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &amp;amp;lt;!-- &#039;&#039;&#039;Benefits at a glance:&#039;&#039;&#039;--&amp;amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &amp;amp;lt;!--&lt;br /&gt;
 * Bullet-point&lt;br /&gt;
 * Bullet-point&lt;br /&gt;
 * Bullet-point&lt;br /&gt;
 --&amp;amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 ==Functions==&lt;br /&gt;
 &lt;br /&gt;
 &amp;amp;lt;!-- Mandatory topic. --&amp;amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;amp;lt;!-- Give functional description about the product. Use formattings if needed --&amp;amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 ==innovaphone CTI ready==&lt;br /&gt;
 &amp;amp;lt;!-- Mandatory topic. --&amp;amp;gt;&lt;br /&gt;
 &amp;amp;lt;!--&lt;br /&gt;
 * Initiate outgoing call (automatic call with no manual intervention, update of called party, correct call direction in call list) yes/no&lt;br /&gt;
 * Answer incoming call yes/no&lt;br /&gt;
 * Hold/Retrieve yes/no&lt;br /&gt;
 * Transfer yes/no&lt;br /&gt;
 --&amp;amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 ==innovaphone Reverse Proxy ready==&lt;br /&gt;
 &amp;amp;lt;!-- Mandatory topic. --&amp;amp;gt;&lt;br /&gt;
 &amp;amp;lt;!--&lt;br /&gt;
 * STUN yes/no&lt;br /&gt;
 * TURN yes/no&lt;br /&gt;
 * ICE yes/no&lt;br /&gt;
 * SIP/TCP yes/no&lt;br /&gt;
 * SIP/TLS yes/no&lt;br /&gt;
 --&amp;amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 ==innovaphone WebRTC ready==&lt;br /&gt;
 &amp;amp;lt;!-- Mandatory topic. --&amp;amp;gt;&lt;br /&gt;
 &amp;amp;lt;!--&lt;br /&gt;
 * Codec G.711 yes/no&lt;br /&gt;
 * Codec OPUS yes/no&lt;br /&gt;
 * DTLS encryption yes/no (RFC?)&lt;br /&gt;
 --&amp;amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 ==Supported Codecs==&lt;br /&gt;
 &amp;amp;lt;!-- Mandatory topic. --&amp;amp;gt;&amp;amp;lt;!--&lt;br /&gt;
 * G.722 yes/no&lt;br /&gt;
 * G.711 A-law yes/no&lt;br /&gt;
 * G.711 y-law yes/no&lt;br /&gt;
 * G.723.1 (53) yes/no&lt;br /&gt;
 * G.729A yes/no&lt;br /&gt;
 * Opus yes/no (RFC, WB, NB?)&lt;br /&gt;
 --&amp;amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 ==DTMF Support==&lt;br /&gt;
 &amp;amp;lt;!-- Mandatory topic. --&amp;amp;gt;&lt;br /&gt;
 &amp;amp;lt;!--&lt;br /&gt;
 * SIP INFO (RFC?)&lt;br /&gt;
 * RTP DTMF (RFC?)&lt;br /&gt;
 --&amp;amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 ==Supports RFC3261 Digest Authentication Scheme (Section 22.4)==&lt;br /&gt;
 &amp;amp;lt;!-- Mandatory topic. --&amp;amp;gt;&lt;br /&gt;
 &amp;amp;lt;!--&lt;br /&gt;
 * Supports RFC3261 Digest Authentication Scheme (Section 22.4) yes/no&lt;br /&gt;
 --&amp;amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 ==Support LDAP Phonebook==&lt;br /&gt;
 &amp;amp;lt;!-- Mandatory topic. --&amp;amp;gt;&lt;br /&gt;
 &amp;amp;lt;!--&lt;br /&gt;
 * Support LDAP Phonebook yes/no&lt;br /&gt;
 --&amp;amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 ==Version==&lt;br /&gt;
 &amp;amp;lt;!-- Mandatory topic. --&amp;gt;&lt;br /&gt;
 &amp;amp;lt;!-- Give used versions for testing of both innovaphone and 3rd-pty product --&amp;amp;gt;&lt;br /&gt;
 &amp;amp;lt;!-- If not present or outdated innovaphone FW is used, no certificate will be given at all --&amp;amp;gt; &lt;br /&gt;
 &lt;br /&gt;
 Product versions used for interop testing:&lt;br /&gt;
 &amp;amp;lt;!-- replace 3rd-Pty-Product by real name --&amp;amp;gt;&lt;br /&gt;
 * 3rd-Pty-Product Version&lt;br /&gt;
 &amp;amp;lt;!-- adjust used innovaphone FW, if applied add further applications (e.g. TAPI &amp;amp; Versions) --&amp;amp;gt;&lt;br /&gt;
 * innovaphone V12r2sr24&lt;br /&gt;
 &lt;br /&gt;
 ==Configuration==&lt;br /&gt;
 &amp;amp;lt;!-- Mandatory topic. --&amp;amp;gt;&lt;br /&gt;
 &amp;amp;lt;!-- Describe configuration steps to be done for both innovaphone and 3rd-pty product --&amp;amp;gt;&lt;br /&gt;
 &amp;amp;lt;!-- If not present, no certificate will be given at all --&amp;amp;gt;&lt;br /&gt;
 &amp;amp;lt;!-- you may either list the config steps by adding text &amp;amp; pictures, or provide the URL to a PDF-formatted config document. Ideally the document is hosted by the 3rd-party-supplier itself --&amp;amp;gt;&lt;br /&gt;
 &amp;amp;lt;!-- in any case you must be aware of the fact that any questions concerning configuration issues will be directly forwarded by innovaphone to you as manufacturer --&amp;amp;gt;&lt;br /&gt;
 ==Summary==&lt;br /&gt;
 &amp;amp;lt;!-- Optional topic. --&amp;amp;gt;&lt;br /&gt;
 &amp;amp;lt;!-- Anything to mention which does not fit to above topics. To be deleted if not needed --&amp;amp;gt; &lt;br /&gt;
 &lt;br /&gt;
 ==Contact==&lt;br /&gt;
 &amp;amp;lt;!-- Mandatory topic. --&amp;amp;gt;&lt;br /&gt;
 &amp;amp;lt;!-- Give contact details for potential interests. You may give personal or general contact data. --&amp;amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 {|&lt;br /&gt;
 | CompanyName&lt;br /&gt;
 |-&lt;br /&gt;
 | ContactName&lt;br /&gt;
 |-&lt;br /&gt;
 | Street&lt;br /&gt;
 |-&lt;br /&gt;
 | ZIP City&lt;br /&gt;
 |-&lt;br /&gt;
 | Tel: &lt;br /&gt;
 |-&lt;br /&gt;
 | Mobile:&lt;br /&gt;
 |-&lt;br /&gt;
 | Mail: [mailto:contactname@companyname contactname@companyname]&lt;br /&gt;
 |} &lt;br /&gt;
&lt;br /&gt;
 For any questions please refer to [https://www.vendor.tld/contact our contact page].&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Start editing according to the comments given&lt;br /&gt;
* DO NOT edit any comment content! This may be subject of change by innovaphone after your work is done!&lt;br /&gt;
* DON&#039;T forget to SAVE!&lt;br /&gt;
* Upload appropriate files/images indicated by a red link&lt;br /&gt;
* Inform your innovaphone contact when finished&lt;br /&gt;
* innovaphone will set the correct product category and grant referral status upon successful document check&lt;/div&gt;</summary>
		<author><name>Nfi</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Reference13r3:Concept_App_Service_Working&amp;diff=67112</id>
		<title>Reference13r3:Concept App Service Working</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Reference13r3:Concept_App_Service_Working&amp;diff=67112"/>
		<updated>2023-04-21T07:23:29Z</updated>

		<summary type="html">&lt;p&gt;Nfi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
[[Category:Concept|Apps]]&lt;br /&gt;
The Working App is an app for recording working hours. There is a user app (Working) to start/stop time tracking and an admin app (Working Admin) to view working hours for all users.&lt;br /&gt;
== Applies To == &lt;br /&gt;
&lt;br /&gt;
* innovaphone PBX from version 13r3&lt;br /&gt;
&lt;br /&gt;
==Requirements==&lt;br /&gt;
* innovaphone PBX&lt;br /&gt;
* innovaphone Application Platform&lt;br /&gt;
* innovaphone myAPPS&lt;br /&gt;
* Firmware V13r3 sr4&lt;br /&gt;
&lt;br /&gt;
==Concept==&lt;br /&gt;
&lt;br /&gt;
The innovaphone Service Working App is an app for tracking working hours.&lt;br /&gt;
There is an user app (Working) to start/stop time tracking (clock style) or add entries manually. This entries must be confirmed to be displayed on the admin app and once they are confirmed they cannot be edited anymore. There is also an admin app (Working Admin) to display the working time information for all users and where the configuration settings can be changed.&lt;br /&gt;
The app is designed to help employees and employeres to easily track working hours.&lt;br /&gt;
&lt;br /&gt;
==How it works==&lt;br /&gt;
&lt;br /&gt;
The first time a user starts the Working App on myApps a new entry is created in the database for this user, based on the &amp;quot;Name&amp;quot; of this user, which will be used to store all the working hours entries, vacation days, sick days and national holidays. Entering the working hours is a two step task, because after defining the start/stop time it is also necessary to &amp;quot;confirm/submit&amp;quot; these hours as correct, after the confirmation is done the user can&#039;t change them anymore and they will be displayed on the admin app.&lt;br /&gt;
&lt;br /&gt;
In the Working Admin App the list of the users&#039; names is based on the &amp;quot;Display Name&amp;quot;, if no DN is set then the &amp;quot;Name&amp;quot; will be used. The app adds a red mark when an user does not fulfill the working hours regulation. Here the settings for the periodic emails can be configured and also if the user is allowed or not to confirm the working hours that do no fulfill the regulation.&lt;br /&gt;
&lt;br /&gt;
== Apps ==&lt;br /&gt;
=== innovaphone-working ===&lt;br /&gt;
[[Image: Innovaphone-working.png]]&lt;br /&gt;
This is an app, where the user can enter the working hours. This can be done by clicking on the start/stop button. The user have also a calendar view to add, edit or delete working hours.&lt;br /&gt;
&lt;br /&gt;
=== innovaphone-working-admin ===&lt;br /&gt;
[[Image: Innovaphone-working-admin.png‎]]&lt;br /&gt;
This is an admin app, where an administrator (i.e. Human Resources) can see the users&#039; working hours. Periodic reports are generated with a list of users who do not comply with the hours restrictions. Several settings like the working hours per week and the number of working days per week can be configured per user and they are set to 40 hours and 5 days by default.&lt;br /&gt;
&lt;br /&gt;
Also some config items can be edited on the hamburguer menu:&lt;br /&gt;
&lt;br /&gt;
* Email address for reports (ie. Human Resources email)&lt;br /&gt;
* Interval for the reports (in weeks, 0 means disabled)&lt;br /&gt;
* SMTP settings (server, username, password and client hostname)&lt;br /&gt;
* Enable/disable restrictions to submit working hours:&lt;br /&gt;
**Allow to confirm working hours on Sundays&lt;br /&gt;
**Allow to confirm working hours on vacation days,national holidays or sick leave&lt;br /&gt;
**Allow to confirm working hours without the required break times.&lt;br /&gt;
**Allow to confirm working hours that exceed the daily maximum (10 hours)&lt;br /&gt;
**Allow to confirm working hours that do not respect the daily rest period&lt;br /&gt;
**Allow to confirm working hours that exceed the maximum on the last 24 weeks&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
;workingadmin: the name of the working admin app.&lt;br /&gt;
&lt;br /&gt;
== PBX Manager Plugins ==&lt;br /&gt;
&lt;br /&gt;
=== Working ===&lt;br /&gt;
&lt;br /&gt;
With the Working plugin App Objects can be created, edited and deleted on the PBX.&lt;br /&gt;
&lt;br /&gt;
==Configuration==&lt;br /&gt;
* Install the Working App via App Store to the App Platform.&lt;br /&gt;
* Create a instance on the Working App Service on the App Platform Manager.&lt;br /&gt;
* Create a new PBX Object for the Working and Working Admin Apps with the PBX Manager Plugin.&lt;br /&gt;
* Assign the Working App (to normal users) and Working Admin App (to administration for example Human Resources) by selecting the config template that should include the App.&lt;br /&gt;
* Set configuration settings on the &amp;quot;burger&amp;quot; menu of the Working Admin App (ie SMTP Server, Reports Interval in weeks, special permissions).&lt;br /&gt;
&lt;br /&gt;
==Troubleshooting==&lt;br /&gt;
Trace flags for App on App Platform:&lt;br /&gt;
&lt;br /&gt;
*App&lt;br /&gt;
*App Database&lt;br /&gt;
*App Websocket&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Trace flags for myAPPS Client:&lt;br /&gt;
&lt;br /&gt;
*Browser Console&lt;br /&gt;
&lt;br /&gt;
==Known issues==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Related Articles==&lt;/div&gt;</summary>
		<author><name>Nfi</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Howto:Snom_IP_phones_-_Snom_-_3rd_Party_Product&amp;diff=66764</id>
		<title>Howto:Snom IP phones - Snom - 3rd Party Product</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Howto:Snom_IP_phones_-_Snom_-_3rd_Party_Product&amp;diff=66764"/>
		<updated>2023-03-30T19:08:04Z</updated>

		<summary type="html">&lt;p&gt;Nfi: /* Certification Status */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:Snom logo gray 60.jpg|350px|right]]&lt;br /&gt;
&lt;br /&gt;
==Product name==&lt;br /&gt;
&amp;lt;!-- Mandatory topic. --&amp;gt;&lt;br /&gt;
&amp;lt;!-- replace CompanyName &amp;amp; ProductName by real names and add URL to productpage --&amp;gt;&lt;br /&gt;
Snom [https://service.snom.com/display/wiki/Desk+Phones VoIP Deskphones]&lt;br /&gt;
&lt;br /&gt;
==Certification Status==&lt;br /&gt;
&amp;lt;!-- do not remove comment. Will be added by innovaphone upon document check &amp;amp; app availablity on appstore --&amp;gt;&lt;br /&gt;
{{Template:Compat_Status_referral_terminals|manufacturername=Snom Technology GmbH|certificationdate=in February 2023}}&lt;br /&gt;
&lt;br /&gt;
==Category==&lt;br /&gt;
[[Category:Referral Product|{{PAGENAME}}]]&lt;br /&gt;
{{Category:3rdParty_Terminal_Devices}}&lt;br /&gt;
[[Category:3rdParty_Terminal_Devices|{{PAGENAME}}]]&lt;br /&gt;
&lt;br /&gt;
==Vendor==&lt;br /&gt;
&amp;lt;!-- Mandatory topic. --&amp;gt;&lt;br /&gt;
&amp;lt;!-- Give some introducting words about the vendor itself --&amp;gt;&lt;br /&gt;
&amp;lt;!-- Place optional company logo. Don&#039;t change logo size. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:Snom logo gray 60.jpg|250px]] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;font size=5px&amp;gt;About us&amp;lt;/font&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Founded in 1997 and headquartered in Berlin, Germany, Snom is a German multinational corporation that manufactures the world’s first and leading brand of professional and enterprise VoIP telephones.&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td colspan=&amp;quot;5&amp;quot;&amp;gt;&amp;lt;b&amp;gt;&amp;lt;font size=4px&amp;gt;Desk phones&amp;lt;/font&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;b&amp;gt;D315&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;[[Image:Snom_d315_180x160.png‎|180px]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;b&amp;gt;D335&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;[[Image:Snom_d335_180x160.png‎‎‎|180px]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;b&amp;gt;D385&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;[[Image:Snom_d385_180x160.png‎|180px]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;b&amp;gt;D713&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;[[Image:Snom_d713_180x160.png|180px]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;strong&amp;gt;D717&amp;lt;br&amp;gt;&amp;lt;/strong&amp;gt;[[Image:Snom_d717_180x160.png‎|180px]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
- 3.2&amp;amp;quot; 300x100 pixel Hi-Res graphical display&amp;lt;br&amp;gt;&lt;br /&gt;
- 5 programmable function keys with red LEDs&amp;lt;br&amp;gt;&lt;br /&gt;
- 4 Sip Identites&amp;lt;br&amp;gt;&lt;br /&gt;
- 2x Gigabit Switch&amp;lt;br&amp;gt;&lt;br /&gt;
- USB Support&amp;lt;br&amp;gt;&lt;br /&gt;
- PoE-Class 2&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;D315 datasheet&amp;lt;/b&amp;gt; [https://service.snom.com/download/attachments/17370025/snom_D315_datasheet_en_1-1-1.pdf?version=1&amp;amp;amp;modificationDate=1556009668153&amp;amp;amp;api=v2]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
- 2.7&amp;amp;quot; 320x240 pixel Hi-Res TFT-color display&amp;lt;br&amp;gt;&lt;br /&gt;
- 8/32 programmable function keys with multicolor LEDs&amp;lt;br&amp;gt;&lt;br /&gt;
- 12 Sip Identites&amp;lt;br&amp;gt;&lt;br /&gt;
- 2x Gigabit Switch&amp;lt;br&amp;gt;&lt;br /&gt;
- USB Support&amp;lt;br&amp;gt;&lt;br /&gt;
- PoE-Class 2&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;D335 datasheet&amp;lt;/b&amp;gt;&lt;br /&gt;
[https://service.snom.com/download/attachments/17370025/snom_D335_datasheet_en_1-0-0.pdf?version=9&amp;amp;amp;modificationDate=1571915926325&amp;amp;amp;api=v2]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
- 4.3&amp;quot; 480x272 pixel Hi-Res TFT-color display&amp;lt;br&amp;gt;&lt;br /&gt;
- 12/48 programmable function keys with multicolor LEDs&amp;lt;br&amp;gt;&lt;br /&gt;
- 12 Sip Identites&amp;lt;br&amp;gt;&lt;br /&gt;
- 2x Gigabit Switch&amp;lt;br&amp;gt;&lt;br /&gt;
- USB Support&amp;lt;br&amp;gt;&lt;br /&gt;
- PoE-Class 3 &lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt; D385 datasheet&amp;lt;/b&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
    [https://service.snom.com/download/attachments/17370025/snom_D385_datasheet_en_1-0-0.pdf?version=1&amp;amp;amp;modificationDate=1556009676425&amp;amp;amp;api=v2]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
- 2.8&amp;quot; 320x240 pixel Hi-Res TFT-color display&amp;lt;br&amp;gt;&lt;br /&gt;
- 4 programmable function keys with multicolor LEDs&amp;lt;br&amp;gt;&lt;br /&gt;
- 6 Sip Identites&amp;lt;br&amp;gt;&lt;br /&gt;
- 2x Gigabit Switch&amp;lt;br&amp;gt;&lt;br /&gt;
- PoE-Class 3&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;D713 datasheet&amp;lt;/b&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
[https://service.snom.com/pages/viewpage.action?pageId=96960609]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
- 2.7&amp;quot; 320x240 pixel Hi-Res TFT-color display&amp;lt;br&amp;gt;&lt;br /&gt;
- 5 programmable function keys with red LEDs&amp;lt;br&amp;gt;&lt;br /&gt;
- 6 Sip Identites&amp;lt;br&amp;gt;&lt;br /&gt;
- 2x Gigabit Switch&amp;lt;br&amp;gt;&lt;br /&gt;
- USB Support&amp;lt;br&amp;gt;&lt;br /&gt;
- PoE-Class 2&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt; D717 datasheet&amp;lt;/b&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
    [https://service.snom.com/download/attachments/17370025/snom_D717_datasheet_en_1-2-0.pdf?version=1&amp;amp;amp;modificationDate=1571915760919&amp;amp;amp;api=v2]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;strong&amp;gt;D735&amp;lt;br&amp;gt;&amp;lt;/strong&amp;gt;[[Image:Snom_d735_180x160.png‎|180px]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;strong&amp;gt;D785&amp;lt;/strong&amp;gt;&amp;lt;br&amp;gt;[[Image:Snom_d785_180x160.png‎‎|180px]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;strong&amp;gt;D862&amp;lt;br&amp;gt;&amp;lt;/strong&amp;gt;[[Image:Snom_d862_180x160.png‎|210px]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;strong&amp;gt;D865&amp;lt;br&amp;gt;&amp;lt;/strong&amp;gt;[[Image:Snom_d865_180x160.png‎‎|210px]]&amp;lt;/td&amp;gt; &lt;br /&gt;
  &lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&lt;br /&gt;
- 2.7&amp;quot; 320x240 pixel Hi-Res TFT-color display&amp;lt;br&amp;gt;&lt;br /&gt;
- 8/32 programmable function keys with multicolor LEDs&amp;lt;br&amp;gt;&lt;br /&gt;
- 12 Sip Identites&amp;lt;br&amp;gt;&lt;br /&gt;
- 2x Gigabit Switch&amp;lt;br&amp;gt;&lt;br /&gt;
- USB Support&amp;lt;br&amp;gt;&lt;br /&gt;
- PoE-Class 2  &lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;D735 datasheet&amp;lt;/b&amp;gt; [https://service.snom.com/download/attachments/17370025/snom_D735_datasheet_en_1-4-0.pdf?version=1&amp;amp;amp;modificationDate=1571915768754&amp;amp;amp;api=v2] &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&lt;br /&gt;
- 2.7&amp;quot; 320x240 pixel Hi-Res TFT-color display&amp;lt;br&amp;gt;&lt;br /&gt;
- 8/32 programmable function keys with multicolor LEDs&amp;lt;br&amp;gt;&lt;br /&gt;
- 12 Sip Identites&amp;lt;br&amp;gt;&lt;br /&gt;
- 2x Gigabit Switch&amp;lt;br&amp;gt;&lt;br /&gt;
- USB Support&amp;lt;br&amp;gt;&lt;br /&gt;
- PoE-Class 2 &lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;D785 datasheet&amp;lt;/b&amp;gt; [https://service.snom.com/download/attachments/17370025/snom_D785_datasheet_en_2-2-0.pdf?version=1&amp;amp;amp;modificationDate=1571915775378&amp;amp;amp;api=v2] &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&lt;br /&gt;
- 5&amp;quot; High-resolution TFT-colour display 1280 x 720 pixels / 16:9&amp;lt;br&amp;gt;&lt;br /&gt;
- 8 programmable function keys with multicolor LEDs&amp;lt;br&amp;gt;&lt;br /&gt;
- 8 Sip Identites&lt;br /&gt;
- 2x Gigabit Switch&amp;lt;br&amp;gt;&lt;br /&gt;
- USB Support&amp;lt;br&amp;gt;&lt;br /&gt;
- PoE-Class 3&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;D862 datasheet&amp;lt;/b&amp;gt; [https://service.snom.com/display/wiki/D862+Datasheet+-+EN]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&lt;br /&gt;
- 5&amp;quot; High-resolution TFT-colour display 1280 x 720 pixels / 16:9&amp;lt;br&amp;gt;&lt;br /&gt;
- 10 programmable function keys with multicolor LEDs&amp;lt;br&amp;gt;&lt;br /&gt;
- 12 Sip Identites&amp;lt;br&amp;gt;&lt;br /&gt;
- 2x Gigabit Switch&amp;lt;br&amp;gt;&lt;br /&gt;
- USB Support&amp;lt;br&amp;gt;&lt;br /&gt;
- PoE-Class 3 &lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;D865 datasheet&amp;lt;/b&amp;gt; [https://service.snom.com/display/wiki/D865+Datasheet+-+EN] &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;strong&amp;gt;M110&amp;lt;br&amp;gt;&amp;lt;/strong&amp;gt;[[Image:Snom_M110_88x160.png‎‎|160px]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;strong&amp;gt;M430&amp;lt;/strong&amp;gt;&amp;lt;br&amp;gt;[[Image:Snom_M430_180x160.png‎‎‎|170px]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;strong&amp;gt;M900&amp;lt;br&amp;gt;&amp;lt;/strong&amp;gt;[[Image:Snom_M900_180x160.png|100px]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;strong&amp;gt;M900 Outdoors&amp;lt;br&amp;gt;&amp;lt;/strong&amp;gt;[[Image:Snom M900 outdoors 180x160.png‎|150px]]&amp;lt;/td&amp;gt; &lt;br /&gt;
  &lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&lt;br /&gt;
- DECT Single-Cell Base station + handset&amp;lt;br&amp;gt;&lt;br /&gt;
- 10 Sip Identites&amp;lt;br&amp;gt;&lt;br /&gt;
- 10 Handsets&amp;lt;br&amp;gt;&lt;br /&gt;
- 6 Simultaneous calls&amp;lt;br&amp;gt;&lt;br /&gt;
- Compatible handsets M10 SC&amp;lt;br&amp;gt;&lt;br /&gt;
- PoE-Class 2  &lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;M110 datasheet&amp;lt;/b&amp;gt; [https://www.snom.com/produkte/schnurlos-telefone/m-sc-serie/snom-m110-sc-bundle/] &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&lt;br /&gt;
- DECT Single-Cell Base station + handset&amp;lt;br&amp;gt;&lt;br /&gt;
- 20 Sip Identites&amp;lt;br&amp;gt;&lt;br /&gt;
- 20 Handsets&amp;lt;br&amp;gt;&lt;br /&gt;
- 10 Simultaneous calls&amp;lt;br&amp;gt;&lt;br /&gt;
- Compatible handsets M25,M30,M65,M85,M70,M80,M90&amp;lt;br&amp;gt;&lt;br /&gt;
- PoE-Class 2 &lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;M430 datasheet&amp;lt;/b&amp;gt; [https://www.snom.com/en/products/cordless-phones/m-series/snom-m430/] &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&lt;br /&gt;
- DECT Multi-Cell with up to 1,000 bases in a cluster&amp;lt;br&amp;gt;&lt;br /&gt;
- Up to 4,000 handsets in a cluster&amp;lt;br&amp;gt;&lt;br /&gt;
- 8 NB, 4 WB calls per M900 base&amp;lt;br&amp;gt;&lt;br /&gt;
- Compatible handsets M25,M30,M65,M85,M70,M80,M90&amp;lt;br&amp;gt;&lt;br /&gt;
- PoE-Class 2 &lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;M900 datasheet&amp;lt;/b&amp;gt; [https://www.snom.com/produkte/schnurlos-telefone/m-serie/snom-m900/]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&lt;br /&gt;
- Outdoors DECT Multi-Cell with up to 1,000 bases in a cluster&amp;lt;br&amp;gt;&lt;br /&gt;
- Up to 4,000 handsets in a cluster&amp;lt;br&amp;gt;&lt;br /&gt;
- 8 NB, 4 WB calls per M900 base&amp;lt;br&amp;gt;&lt;br /&gt;
- Compatible handsets M25,M30,M65,M85,M70,M80,M90&amp;lt;br&amp;gt;&lt;br /&gt;
- PoE-Class 2 &lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;M900 outdoors datasheet&amp;lt;/b&amp;gt; [https://www.snom.com/produkte/schnurlos-telefone/m-serie/snom-m900-outdoor/] &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Functions==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Mandatory topic. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Give functional description about the product. Use formattings if needed --&amp;gt;&lt;br /&gt;
* Initiate outgoing call = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
* Answer incoming call = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
* Hold/Retrieve = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
* Transfer = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
* Call waiting  = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
* Do not disturb = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
* Call Conference  = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt; ([https://service.snom.com/display/wiki/Ad-Hoc+Conference+-+V10 Snom - Ad-Hoc Conference])&lt;br /&gt;
* Call Park = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
* Voice Messages Center &lt;br /&gt;
* Call Forward and divert = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
* Intercom (HS to HS) = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
* Called, calling, and connected party information  = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
* Missed-call notification = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
* 1-touch speed dial = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
* Redial = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
* Zero touch provisioning, management, configuration and remote debugging  = &amp;lt;b&amp;gt;yes with SRAPS&amp;lt;/b&amp;gt; ( [https://service.snom.com/display/wiki/SRAPS See more informations here])&lt;br /&gt;
* SIP NATPR &lt;br /&gt;
* Background Upgrades  = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
* Dynamic Search of Network Based Directory = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
* BLF = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==innovaphone CTI ready==&lt;br /&gt;
* Initiate outgoing call (automatic call with no manual intervention, update of called party, correct call direction in call list) = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
* Hold/Retrieve = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
* Transfer = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==innovaphone Reverse Proxy ready==&lt;br /&gt;
&amp;lt;!-- Mandatory topic. --&amp;gt;&lt;br /&gt;
* STUN = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
* TURN = No ([https://wiki.innovaphone.com/index.php?title=Reference13r3:Concept_Third_Party_Phones not needed with 13r3])&lt;br /&gt;
* ICE = No ([https://wiki.innovaphone.com/index.php?title=Reference13r3:Concept_Third_Party_Phones not needed with 13r3])&lt;br /&gt;
* SIP/TCP = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
* SIP/TLS = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==innovaphone WebRTC ready==&lt;br /&gt;
&amp;lt;!-- Mandatory topic. --&amp;gt;&lt;br /&gt;
* Codec G.711 &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
* Codec OPUS &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
* DTLS encryption &amp;lt;b&amp;gt;no&amp;lt;/b&amp;gt; ([https://wiki.innovaphone.com/index.php?title=Reference13r3:Concept_Third_Party_Phones not needed with 13r3])&lt;br /&gt;
&lt;br /&gt;
==Supported Codecs==&lt;br /&gt;
&amp;lt;!-- Mandatory topic. --&amp;gt;&lt;br /&gt;
* G.722 = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
* G.711 A-law = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
* G.711 y-law = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
* G.723.1 = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
* G.729A = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
* Opus = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
==DTMF Support==&lt;br /&gt;
&amp;lt;!-- Mandatory topic. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* SIP v1 (RFC2543), v2 (RFC3261)&lt;br /&gt;
* DTMF: In-band, Out-of-band(RFC 2833) and SIP INFO&lt;br /&gt;
==Supports RFC3261 Digest Authentication Scheme (Section 22.4)==&lt;br /&gt;
&amp;lt;!-- Mandatory topic. --&amp;gt;&lt;br /&gt;
* Supports RFC3261 Digest Authentication Scheme (Section 22.4)&lt;br /&gt;
==Support LDAP Phonebook==&lt;br /&gt;
&amp;lt;!-- Mandatory topic. --&amp;gt;&lt;br /&gt;
* Support LDAP Phonebook = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;b&amp;gt;LDAP Configuration in Snom D3xx,D7xx and D8xx series.&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Create LDAP Function Key example:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Go to Snom phone web user interface.&lt;br /&gt;
&lt;br /&gt;
Setup-&amp;gt;Function Keys-&amp;gt;configure desired key for LDAP.&lt;br /&gt;
&lt;br /&gt;
In Example below we chose P1 Key for LDAP.&lt;br /&gt;
&lt;br /&gt;
[[Image:LDAP_Fkey.jpg|1000px]]&lt;br /&gt;
&lt;br /&gt;
Example view from D713 Snom phone:&lt;br /&gt;
&lt;br /&gt;
[[Image:LDAP_Fkey_D713.jpg|200px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;LDAP Configuration with innovaphone cloud configuration TLS&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Go to phone web interface Setup-&amp;gt;Advanced-&amp;gt;Network-&amp;gt;LDAP (section)&lt;br /&gt;
&lt;br /&gt;
[[Image:LDAP_TLS.jpg‎]]&lt;br /&gt;
&lt;br /&gt;
Configuration:&lt;br /&gt;
&lt;br /&gt;
ldap_search_filter=(|(sn=*%*)(cn=*%*))&lt;br /&gt;
&lt;br /&gt;
ldap_number_filter=dn=%&lt;br /&gt;
&lt;br /&gt;
ldap_search_filter_during_call=(|(sn=*%*)(cn=*%*))&lt;br /&gt;
&lt;br /&gt;
ldap_number_filter_during_call=dn=%&lt;br /&gt;
&lt;br /&gt;
ldap_server=00000-pbx.innovaphone.com&lt;br /&gt;
&lt;br /&gt;
ldap_port=636&lt;br /&gt;
&lt;br /&gt;
ldap_base=cn=PBX0&lt;br /&gt;
&lt;br /&gt;
ldap_username=00000_your_pbx_number-pbx.innovaphone.com\ldap-test&lt;br /&gt;
&lt;br /&gt;
ldap_password= your password&lt;br /&gt;
&lt;br /&gt;
ldap_name_attributes=dn cn sn&lt;br /&gt;
&lt;br /&gt;
ldap_number_attributes=e164&lt;br /&gt;
&lt;br /&gt;
ldap_display_name=%dn&lt;br /&gt;
&lt;br /&gt;
ldap_over_tls=on&lt;br /&gt;
&lt;br /&gt;
ldap_sort_mode=client&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;LDAP local innovaphone installation - no encryption&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:LDAP_local_small.jpg]]&lt;br /&gt;
&lt;br /&gt;
Configuration:&lt;br /&gt;
&lt;br /&gt;
ldap_search_filter=(|(sn=*%*)(cn=*%*))&lt;br /&gt;
&lt;br /&gt;
ldap_number_filter=dn=%&lt;br /&gt;
&lt;br /&gt;
ldap_search_filter_during_call=(|(sn=*%*)(cn=*%*))&lt;br /&gt;
&lt;br /&gt;
ldap_number_filter_during_call=dn=%&lt;br /&gt;
&lt;br /&gt;
ldap_server=192.168.0.111&lt;br /&gt;
&lt;br /&gt;
ldap_port=389&lt;br /&gt;
&lt;br /&gt;
ldap_base=cn=PBX0&lt;br /&gt;
&lt;br /&gt;
ldap_username=your_local_domain\ldap-test&lt;br /&gt;
&lt;br /&gt;
ldap_password= your password&lt;br /&gt;
&lt;br /&gt;
ldap_name_attributes=dn cn sn&lt;br /&gt;
&lt;br /&gt;
ldap_number_attributes=e164&lt;br /&gt;
&lt;br /&gt;
ldap_display_name=%dn&lt;br /&gt;
&lt;br /&gt;
ldap_over_tls=off&lt;br /&gt;
&lt;br /&gt;
ldap_sort_mode=client&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;b&amp;gt;LDAP Configuration in Snom M400 and M900 series cloud installation with TLS &amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:LDAP_M900_small.jpg|500px]]&lt;br /&gt;
&lt;br /&gt;
Configuration in .xml format:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ldap_username&amp;gt;00000-pbx.innovaphone.com\ldap-test&amp;lt;/ldap_username&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ldap_search_filter&amp;gt;(|(e164=%*)(cn=%*))&amp;lt;/ldap_search_filter&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ldap_home_number&amp;gt;e164&amp;lt;/ldap_home_number&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ldap_mobile_number&amp;gt;mobile&amp;lt;/ldap_mobile_number&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ldap_work_number&amp;gt;telephoneNumber&amp;lt;/ldap_work_number&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ldap_name_attributes&amp;gt;cn&amp;lt;/ldap_name_attributes&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ldap_number_attributes&amp;gt;telephoneNumber mobile e164&amp;lt;/ldap_number_attributes&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ldap_password&amp;gt;**********&amp;lt;/ldap_password&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ldap_port&amp;gt;636&amp;lt;/ldap_port&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ldap_base&amp;gt;cn=PBX0&amp;lt;/ldap_base&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ldap_server&amp;gt;00000-pbx.innovaphone.com&amp;lt;/ldap_server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ldap_sort_attribute&amp;gt;0&amp;lt;/ldap_sort_attribute&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ldap_tls&amp;gt;on&amp;lt;/ldap_tls&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ldap_use_ext_nbr_to_ldap_bind&amp;gt;disabled&amp;lt;/ldap_use_ext_nbr_to_ldap_bind&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ldap_virtual_lists&amp;gt;off&amp;lt;/ldap_virtual_lists&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;b&amp;gt;LDAP Configuration in Snom M400 and M900 local installation (IP811) &amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:LDAP_M900_loacl.jpg‎]]&lt;br /&gt;
&lt;br /&gt;
Configuration in .xml format:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ldap_username&amp;gt;snomlocalpbx\ldap-test&amp;lt;/ldap_username&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ldap_search_filter&amp;gt;(|(e164=%*)(cn=%*))&amp;lt;/ldap_search_filter&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ldap_home_number&amp;gt;e164&amp;lt;/ldap_home_number&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ldap_mobile_number&amp;gt;mobile&amp;lt;/ldap_mobile_number&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ldap_work_number&amp;gt;telephoneNumber&amp;lt;/ldap_work_number&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ldap_name_attributes&amp;gt;cn&amp;lt;/ldap_name_attributes&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ldap_number_attributes&amp;gt;telephoneNumber mobile e164&amp;lt;/ldap_number_attributes&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ldap_password&amp;gt;**********&amp;lt;/ldap_password&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ldap_port&amp;gt;636&amp;lt;/ldap_port&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ldap_base&amp;gt;cn=PBX0&amp;lt;/ldap_base&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ldap_server&amp;gt;192.168.0.111&amp;lt;/ldap_server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ldap_sort_attribute&amp;gt;0&amp;lt;/ldap_sort_attribute&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ldap_tls&amp;gt;off&amp;lt;/ldap_tls&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ldap_use_ext_nbr_to_ldap_bind&amp;gt;disabled&amp;lt;/ldap_use_ext_nbr_to_ldap_bind&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ldap_virtual_lists&amp;gt;off&amp;lt;/ldap_virtual_lists&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
For further informations please refer to this [https://service.snom.com/display/wiki/LDAP+Directory LDAP Directory configuration guide]&lt;br /&gt;
&lt;br /&gt;
==Version==&lt;br /&gt;
&amp;lt;!-- Mandatory topic. --&amp;gt;&lt;br /&gt;
&amp;lt;!-- Give used versions for testing of both innovaphone and 3rd-pty product --&amp;gt;&lt;br /&gt;
&amp;lt;!-- If not present or outdated innovaphone FW is used, no certificate will be given at all --&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Product versions used for interop testing: / Produktversionen, die für Interop-Tests verwendet werden:&lt;br /&gt;
&amp;lt;!-- replace 3rd-Pty-Product by real name --&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Snom D315&#039;&#039;&#039; FW: 10.1.25.0&lt;br /&gt;
* &#039;&#039;&#039;Snom D345&#039;&#039;&#039; FW: 10.1.25.0&lt;br /&gt;
* &#039;&#039;&#039;Snom D715&#039;&#039;&#039; FW: 10.1.141.13&lt;br /&gt;
* &#039;&#039;&#039;Snom D735&#039;&#039;&#039; FW: 10.1.141.13&lt;br /&gt;
* &#039;&#039;&#039;Snom D785&#039;&#039;&#039; FW: 10.1.141.13&lt;br /&gt;
* &#039;&#039;&#039;Snom D862&#039;&#039;&#039; FW: 10.1.141.13&lt;br /&gt;
* &#039;&#039;&#039;Snom D865&#039;&#039;&#039; FW: 10.1.141.13&lt;br /&gt;
* &#039;&#039;&#039;Snom M100&#039;&#039;&#039; FW: M100KLE-1.0.5.2-0 Handsets: M10KLE-1.4.5.12-0&lt;br /&gt;
* &#039;&#039;&#039;Snom M400&#039;&#039;&#039; FW: 650 B2 Handsets: 650 B2&lt;br /&gt;
* &#039;&#039;&#039;Snom M900&#039;&#039;&#039; FW: 650 B2 Handsets: 650 B2&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Innovaphone IP811&#039;&#039;&#039; FW:13r3 final IPVA[13.7758]&lt;br /&gt;
* &#039;&#039;&#039;Innovaphone cloud&#039;&#039;&#039; FW:13r3 final IPVA[13.7758]&lt;br /&gt;
&lt;br /&gt;
== Konfiguration (German) == &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Informationen zum PBX-System===&lt;br /&gt;
Die hier verwendete PBX ist eine innovaphone IP811. Die Angaben sind jedoch auf die weiteren innovaphone Modelle übertragbar.&lt;br /&gt;
&lt;br /&gt;
Für die Sprachübertragung zwischen den VoIP-Komponenten wird das Protokoll SIP verwendet.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
=== Installation der innovaphone PBX ===&lt;br /&gt;
&lt;br /&gt;
//Verbinden Sie die linke &#039;&#039;&#039;ETH0&#039;&#039;&#039;-Buchse am Gerät über ein Ethernet-Kabel mit einem PoE-Switch. Sobald es an die Spannungsversorgung angeschlossen ist, wird das Gerät eingeschaltet und die LED Ready leuchtet.&lt;br /&gt;
[[Image:innovaphone Network Ports.png]]&lt;br /&gt;
&lt;br /&gt;
//Normalerweise erhält das Gerät eine IP-Adresse, die vom DHCP-Server im Netzwerk vergeben wird. Um auf die Web-Benutzeroberfläche zur Konfiguration der Telefonanlage zuzugreifen, geben Sie diese IP-Adresse in Ihren Webbrowser ein und geben Sie den Benutzernamen und das Passwort ein. &lt;br /&gt;
&lt;br /&gt;
Wenn Sie keinen DHCP-Server in Ihrem Netzwerk haben, können Sie auf das Gerät zugreifen, &lt;br /&gt;
indem Sie die MAC-Adresse in einen Browser (z.B. http: //0090331e16b8) eingeben oder das Gerät werkseitig zurücksetzen.&lt;br /&gt;
Nach dem Reset haben beide Ethernet-Ports statische IP-Adressen (http: //192.168.0.1 (ETH0) oder http: //192.168.1.1 (ETH1)).&lt;br /&gt;
 &lt;br /&gt;
[[Image:innovaphone Reset.png]]&lt;br /&gt;
 &lt;br /&gt;
Drücken Sie die Reset-Taste mit einem spitzen Gegenstand (z.B. einem Kugelschreiber).&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
=== Netzwerk konfigurieren ===&lt;br /&gt;
&lt;br /&gt;
Unter &amp;quot;&#039;&#039;&#039;IP4/ETH0/IP&#039;&#039;&#039;&amp;quot; können sie die Netzwerkeinstellungen für die erste Netzwerkkarte (&#039;&#039;&#039;ETH0&#039;&#039;&#039;) vornehmen. &lt;br /&gt;
&lt;br /&gt;
[[Image:innovaphone Network Settings.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Um es aktiv zu schalten muß man unter &amp;quot;&#039;&#039;&#039;IP4/ETH0/DHCP&#039;&#039;&#039;&amp;quot; zunächst den &amp;quot;&#039;&#039;&#039;DHCP&#039;&#039;&#039;&amp;quot; deaktivieren:&lt;br /&gt;
&lt;br /&gt;
[[Image:innovaphone DHCP Disable.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Anschließend ist ein Reset notwendig. Diesen kann man unter &amp;quot;&#039;&#039;&#039;Maintenance/Reset&#039;&#039;&#039;&amp;quot; veranlassen.&lt;br /&gt;
&lt;br /&gt;
[[Image:innovaphone Reset Setting.png]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
=== PBX Lizenz &amp;amp; Testmode ===&lt;br /&gt;
&lt;br /&gt;
Bevor Sie neue Telefone zu Ihrer innovaphone hinzufügen können, müssen Sie zunächst Ihre Lizenz aktivieren oder wenn sie es testen wollen ohne die Lizenz, den Testmode aktivieren.&lt;br /&gt;
&lt;br /&gt;
* Um Ihre Lizenz hochzuladen oder den Testmode zu aktivieren gehen sie zu &amp;quot;&#039;&#039;&#039;General/License&#039;&#039;&#039;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Image:innovaphone License Testmode.jpg]]&lt;br /&gt;
&lt;br /&gt;
* Wenn sie eine Lizenz haben klicken sie auf &amp;quot;&#039;&#039;&#039;Datei auswählen&#039;&#039;&#039;&amp;quot; und dann auf &amp;quot;&#039;&#039;&#039;upload&#039;&#039;&#039;&amp;quot;.&lt;br /&gt;
* Wenn Sie den Testmodus aktivieren möchten, drücken Sie &amp;quot;&#039;&#039;&#039;Testmodus&#039;&#039;&#039;&amp;quot;. Im Testmodus akzeptiert die innovaphone PBX Registrierungen für 8 Stunden.&lt;br /&gt;
Danach müssen Sie eine Lizenz hochladen oder den Testmodus erneut aktivieren.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== PBX Teilnehmer ===&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
Gehen sie zu &amp;quot;&#039;&#039;&#039;PBX/Ojects&#039;&#039;&#039;&amp;quot;, wählen &amp;quot;&#039;&#039;&#039;User&#039;&#039;&#039;&amp;quot; und klicken auf &amp;quot;&#039;&#039;&#039;show&#039;&#039;&#039;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Image:innovaphone PBX Objects Show.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Es erscheint die Übersicht aller User (Geräte).&lt;br /&gt;
&lt;br /&gt;
[[Image:innovaphone PBX Objects List.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nun klicken sie auf &amp;quot;&#039;&#039;&#039;new&#039;&#039;&#039;&amp;quot; und es erscheint folgendes Fenster:&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:innovaphone ip811 pbx General new user en sm.jpg]] &lt;br /&gt;
[[Image:Snom_WUI_Identity_Innovaphone_sm_de.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hier gilt es ein paar Dinge zu beachten:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Das Feld Number enthält die Telefonnummer. Diese tragen sie auch genau so im Webinterface (WUI) Ihres Snom Telefons ein unter &amp;quot;&#039;&#039;&#039;Identität 1&#039;&#039;&#039;&amp;quot; im Feld Account.&lt;br /&gt;
* Das Feld Passwort ist das gleiche das sie im Webinterface (WUI) Ihres Snom Telefons benötigen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration der SNOM Telefone ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bitte stellen Sie sicher, dass Ihr Telefon korrekt angeschlossen ist.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Zuerst packen Sie Ihr Snom Phone aus und stellen Sie es auf den Tisch.&lt;br /&gt;
* Verwenden Sie dazu das beiliegende Netzwerkkabel und verbinden Sie die Buchse &amp;quot;&#039;&#039;&#039;Net&#039;&#039;&#039;&amp;quot; Ihres Telefons mit Ihrem Netzwerk-Switch.&lt;br /&gt;
* Um Ihr Snom Phone mit Strom zu versorgen, benötigen Sie entweder einen Netzwerk-Switch mit &amp;quot;&#039;&#039;&#039;POE&#039;&#039;&#039;&amp;quot; (Power over Ethernet) oder ein geeignetes Snom-Netzteil.&lt;br /&gt;
 (in der Regel 5V - Keine Garantie für Schäden bei Verwendung eines externen Netzteils).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bitte überprüfen Sie vorab, ob auf Ihrem Telefon die neueste stabile Firmware-Version installiert ist.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Bitte besuchen sie hierfür unser Snom Service Hub: [https://service.snom.com/display/wiki/Firmware+Update+Center Firmware Update Center]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Snom Web-Benutzeroberfläche&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Da die automatische Bereitstellung von der innovaphone PBX nicht unterstützt wird, muss das Snom Telefon über seine Web-Benutzeroberfläche (WUI) eingerichtet werden. &lt;br /&gt;
* Um auf das Telefon zuzugreifen, geben Sie die IP-Adresse Ihres Telefons in Ihren Internet-Browser ein (z.B. http: //192.168.1.100). &lt;br /&gt;
* Um die IP-Adresse Ihres Telefons herauszufinden, drücken Sie die Konfigurationstaste (Zahnradsymbol) -&amp;gt; &amp;quot;&#039;&#039;&#039;Informationen&#039;&#039;&#039;&amp;quot; -&amp;gt; &amp;quot;&#039;&#039;&#039;Systeminformationen&#039;&#039;&#039;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Snom Identität konfigurieren ===&lt;br /&gt;
&lt;br /&gt;
Wählen Sie zunächst den Menüpunkt &amp;quot;&#039;&#039;&#039;Identität 1&#039;&#039;&#039;&amp;quot; auf der linken Seite und geben Sie die Benutzer-ID und das Passwort ein, die Sie in die innovaphone PBX eingegeben haben.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Angezeigter Name&#039;&#039;&#039;: testphone1 &lt;br /&gt;
* &#039;&#039;&#039;Nutzerkennung&#039;&#039;&#039;:  100 (Rufnummer) &lt;br /&gt;
* &#039;&#039;&#039;Passwort&#039;&#039;&#039;: 123 (wie in der innovaphone vergeben)&lt;br /&gt;
* &#039;&#039;&#039;Registrar&#039;&#039;&#039;: 192.168.100.250  (IP der innovaphone)&lt;br /&gt;
&lt;br /&gt;
Klicken sie unten auf &amp;quot;&#039;&#039;&#039;übernehmen&#039;&#039;&#039;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Image:innovaphone ip811 identity Login de.jpg]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ihr Snom Telefon ist nun erfolgreich an der innovaphone PBX registriert&#039;&#039;&#039; und kann Anrufe tätigen und entgegennehmen.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
=== Konfiguration der innovaphone sichern. ===&lt;br /&gt;
&lt;br /&gt;
Sie können die Konfiguration Ihrer innovaphone in einer Config Datei Exportieren.&lt;br /&gt;
Gehen sie dafür zu &amp;quot;&#039;&#039;&#039;Maintenance/Diagnostics/Config-Show&#039;&#039;&#039;&amp;quot;. Dort wird Ihnen eine komplette Liste angezeigt. Markieren sie die ganze Liste von oben nach unten und kopieren den Inhalt in eine Textdatei.&lt;br /&gt;
&lt;br /&gt;
[[Image:innovaphone Config Show.png]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
=== Zurücksetzen der innovaphone PBX ===&lt;br /&gt;
Sollte es aus irgendeinem Grund notwendig erscheinen die innovaphone PBX neuzustarten oder auf Werkseinstellung zurückzusetzten, zeigen wir ihnen hier wie das geht:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Neustart mit Erhalt der Konfigurationsdaten:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Durch einen kurzen &#039;&#039;&#039;Reset&#039;&#039;&#039; wird das Gerät neu gestartet. Der Reset-Knopf darf dabei &#039;&#039;&#039;nicht länger als eine Sekunde&#039;&#039;&#039; gedrückt werden.&lt;br /&gt;
 &lt;br /&gt;
[[Image:innovaphone Reset.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Neustart mit Rücksetzen der Konfiguration auf Werkseinstellungen:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Hierzu wird ein langer Reset durchgeführt, wobei der Reset- Knopf länger als 20 Sekunden gedrückt wird. &lt;br /&gt;
  Dadurch wird der Flash-Speicher des Gerätes gelöscht und dieses auf die Werkseinstellungen zurückgesetzt.&lt;br /&gt;
* Anschließend wechselt es in den TFTP-Modus. Je nach Größe und Nutzung des Flash-Speichers kann dieser Vorgang bis zu 60 Sekunden dauern. &lt;br /&gt;
  Die LED des Geräts flackert solange, bis der Speicher komplett gelöschtwurde.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Bitte führen Sie währenddessen keinen erneuten Reset durch und unterbrechen Sie die Stromversorgung nicht.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Wenn das Flackern erloschen ist und die LED rot leuchtet, dann bitte kurz dasGerät von der Stromversorgung trennen.&lt;br /&gt;
* Das Gerät ist nun im Werkszustand und kann wieder über seine IP-Adresse oder die NetBIOS-Methode erreicht werden.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
=== Wiederherstellen der Konfiguration ===&lt;br /&gt;
&lt;br /&gt;
Wenn Sie über den Browser auf das Admin-UI zugreifen, gehen Sie bitte zu &amp;quot;&#039;&#039;&#039;Maintenance/Upload/Config&#039;&#039;&#039;&amp;quot; und laden Sie die Backup-Konfigurationsdatei hoch.&lt;br /&gt;
&lt;br /&gt;
[[Image:innovaphone Upload Config.png]]&lt;br /&gt;
&lt;br /&gt;
* Evtl. kommt eine Meldung, &amp;quot;&#039;&#039;&#039;Lines skipped&#039;&#039;&#039;&amp;quot;, das können sie ignorieren.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Anschließend führen sie wie verlangt einen Reset der Box aus (Klick auf Reset Button). &lt;br /&gt;
&lt;br /&gt;
[[Image:innovaphone Upload Config Reset sm.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nach dem Neustart hat die innovaphone PBX die wiederhergestellte Konfiguration.&lt;br /&gt;
&lt;br /&gt;
[[Image:innovaphone General Info sm.png]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Configuration (English) ==&lt;br /&gt;
&lt;br /&gt;
===Information about the PBX system===&lt;br /&gt;
The PBX used here is an innovaphone IP811. However, the specifications are transferable to the other innovaphone models.&lt;br /&gt;
&lt;br /&gt;
The SIP protocol is used for voice transmission between the VoIP components.&lt;br /&gt;
&lt;br /&gt;
=== PBX User / Extension ===&lt;br /&gt;
&lt;br /&gt;
[[Image:innovaphone ip811 pbx General new user en sm.jpg]] &lt;br /&gt;
[[Image:Snom WUI Identity innovaphone sm en.jpg]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;There are a few things to consider here:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* The &amp;quot;&#039;&#039;&#039;Number&#039;&#039;&#039;&amp;quot; field contains the telephone number. This same number is used in the &amp;quot;&#039;&#039;&#039;Account Field&#039;&#039;&#039;&amp;quot; in the web interface (WUI) of your snom phone under &amp;quot;&#039;&#039;&#039;Identity 1&#039;&#039;&#039;&amp;quot;.&lt;br /&gt;
* Please provide a strong enough password for the account.&lt;br /&gt;
&lt;br /&gt;
=== Configuration of the Snom phone ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Please make sure your phone is set up correctly.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* First of all, unpack your Snom Phone and put it on the table.&lt;br /&gt;
* To connect it use the enclosednetwork cable and connect the &amp;quot;&#039;&#039;&#039;Net&#039;&#039;&#039;&amp;quot; socket of your telephone to your network switch.&lt;br /&gt;
* To get power for your Snom Phone either a network switch with &amp;quot;&#039;&#039;&#039;POE&#039;&#039;&#039;&amp;quot; (Power over Ethernet) or a suitable Snom power supply unit&lt;br /&gt;
    (usually 5V - No guarantee for damage when using an external power supply).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Please check in advance that your phone has the latest stable firmware version installed.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Have a look on our Snom Wiki: [http://wiki.snom.com/Firmware Snom Firmware Guide]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Enter Snom Webinterface&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 Since auto provisioning is not supported by the innovaphone PBX, the Snom Phone needs to be set up using its web user interface (WUI). &lt;br /&gt;
 To access the phone, type the IP address of your phone into your internet browser (e.g. http: //192.168.1.100).&lt;br /&gt;
 To find out the IP address of your phone press the Configuration key (gear wheel symbol) -&amp;gt; &amp;quot;&#039;&#039;&#039;Information&#039;&#039;&#039;&amp;quot; -&amp;gt; &amp;quot;&#039;&#039;&#039;System information&#039;&#039;&#039;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Register a SIP account ===&lt;br /&gt;
&lt;br /&gt;
First select the &amp;quot; &#039;&#039;&#039;Identity 1&#039;&#039;&#039; &amp;quot; menu item on the left-hand side and enter the user ID and password you entered into the innovaphone PBX.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Displayname:&#039;&#039;&#039; testphone1&lt;br /&gt;
* &#039;&#039;&#039;Account:&#039;&#039;&#039; 100 (telephone number)&lt;br /&gt;
* &#039;&#039;&#039;Password:&#039;&#039;&#039; 123 (as assigned in the innovaphone)&lt;br /&gt;
* &#039;&#039;&#039;Registrar:&#039;&#039;&#039; 192.168.100.250 (IP Adress of the innovaphone) &lt;br /&gt;
&lt;br /&gt;
Click on &amp;quot;&#039;&#039;&#039;apply&#039;&#039;&#039; &amp;quot; below.&lt;br /&gt;
&lt;br /&gt;
[[Image:innovaphone ip811 identity Login en.jpg]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;The phone configuration is now complete.&#039;&#039;&#039; Your Snom phone is now successfully registered on the innovaphone PBX and can make and receive calls.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Contact Details==&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| Company Name: || Snom Technology GmbH&lt;br /&gt;
|-&lt;br /&gt;
| Street: || Wittestraße 30 G&lt;br /&gt;
|-&lt;br /&gt;
| ZIP/City: || 13509 Berlin&lt;br /&gt;
|-&lt;br /&gt;
| Country: || Germany&lt;br /&gt;
|-&lt;br /&gt;
| Phone: || +49 30 39833-0&lt;br /&gt;
|-&lt;br /&gt;
| Fax: || +49 30 39833-111&lt;br /&gt;
|-&lt;br /&gt;
| Mail: || [mailto:officemanagement@snom.com officemanagement@snom.com]&lt;br /&gt;
|-&lt;br /&gt;
| Internet: || [https://www.snom.com Snom Technology GmbH]&lt;br /&gt;
|-&lt;br /&gt;
| Contact: || [https://www.snom.com/de/kontakt/ Snom contact]&lt;br /&gt;
|-&lt;br /&gt;
| Support: || [https://service.snom.com Snom Service Hub]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Nfi</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Howto13r3:ATCOM_IP_Phones_-_ATCOM_-_3rd_Party_Product&amp;diff=66598</id>
		<title>Howto13r3:ATCOM IP Phones - ATCOM - 3rd Party Product</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Howto13r3:ATCOM_IP_Phones_-_ATCOM_-_3rd_Party_Product&amp;diff=66598"/>
		<updated>2023-03-22T14:46:33Z</updated>

		<summary type="html">&lt;p&gt;Nfi: /* innovaphone Reverse Proxy ready */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- replace CompanyLogo by real logo-name. Do not change size &amp;amp; alignment. Upload image by pressing red link --&amp;gt;&lt;br /&gt;
[[Image:atcom_logo.png||270px|right]]&lt;br /&gt;
&lt;br /&gt;
==Product Name==&lt;br /&gt;
&amp;lt;!-- Mandatory topic. --&amp;gt;&lt;br /&gt;
&amp;lt;!-- replace CompanyName &amp;amp; ProductName by real names and add URL to productpage --&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;ATCOM Gigabit IP phone&#039;&#039;&#039;&lt;br /&gt;
*ATCOM D26&lt;br /&gt;
*ATCOM D38&lt;br /&gt;
*ATCOM A26&lt;br /&gt;
*ATCOM A48&lt;br /&gt;
*ATCOM A68&lt;br /&gt;
*&#039;&#039;&#039;ATCOM 100M IP phone&#039;&#039;&#039;&lt;br /&gt;
*ATCOM D20&lt;br /&gt;
*ATCOM D21&lt;br /&gt;
*ATCOM D32&lt;br /&gt;
*ATCOM D33&lt;br /&gt;
*ATCOM A20&lt;br /&gt;
*ATCOM A21&lt;br /&gt;
*ATCOM A41&lt;br /&gt;
*&#039;&#039;&#039;ATCOM Wi-Fi IP phone&#039;&#039;&#039;&lt;br /&gt;
*ATCOM A20W/A20WAC&lt;br /&gt;
*ATCOM A41W&lt;br /&gt;
*ATCOM A48W/A48WAC&lt;br /&gt;
*ATCOM A68W/A68WAC&lt;br /&gt;
*ATCOM A2SW&lt;br /&gt;
*ATCOM D2SW&lt;br /&gt;
*&#039;&#039;&#039;ATCOM 4G SIP/VoLTE phone&#039;&#039;&#039;&lt;br /&gt;
*ATCOM A68LTE&lt;br /&gt;
*ATCOM A20LTE&lt;br /&gt;
*ATCOM A2SV-PW&lt;br /&gt;
*ATCOM D2SV-PW&lt;br /&gt;
[https://www.atcom.cn/html/yingwenban/Product/Gigabit_IP/ ATCOM IP phones]&lt;br /&gt;
&lt;br /&gt;
==Certification Status==&lt;br /&gt;
&amp;lt;!-- do not remove comment. Will be added by innovaphone upon document check &amp;amp; app availablity on appstore --&amp;gt;&lt;br /&gt;
{{Template:Compat_Status_referral_terminals|manufacturername=ATCOM Techno­logy Co. LTD.|certificationdate=in November 2022}}&lt;br /&gt;
&lt;br /&gt;
==Category==&lt;br /&gt;
&amp;lt;!-- Do not change this section and do not remove comments. Will be done by innovaphone upon document check --&amp;gt;&lt;br /&gt;
[[Category:Referral Product|{{PAGENAME}}]]&lt;br /&gt;
{{Category:3rdParty_Terminal_Devices}}&lt;br /&gt;
[[Category:3rdParty_Terminal_Devices|{{PAGENAME}}]]&lt;br /&gt;
&lt;br /&gt;
==Vendor==&lt;br /&gt;
&amp;lt;!-- Mandatory topic. --&amp;gt;&lt;br /&gt;
&amp;lt;!-- Give some introducting words about the vendor itself --&amp;gt;&lt;br /&gt;
&amp;lt;!-- Place optional company logo. Don&#039;t change logo size. --&amp;gt;&lt;br /&gt;
[[Image:atcom_logo.png|270px]] &lt;br /&gt;
&lt;br /&gt;
ATCOM is a state certified high-tech enterprise in China. It is one of the earliest companies engaged in VoIP Industry in China. It has 13 years of experience in R&amp;amp;D, manufacturing and technical service of IP telephone and related IP voice terminals. Its products are sold in more than 100 countries, providing high-quality products and services for millions of users.&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&amp;lt;!-- Mandatory topic. --&amp;gt;&lt;br /&gt;
&amp;lt;!-- Give description about the product, benefits, other information to mention to understand main product purpose --&amp;gt;&lt;br /&gt;
&amp;lt;!-- place optional product logo or functional overwiew. --&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td colspan=&amp;quot;5&amp;quot;&amp;gt;&amp;lt;b&amp;gt;&amp;lt;font size=4px&amp;gt;IP phones&amp;lt;/font&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;b&amp;gt;D21&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;[[Image:D2Xlogo.png‎]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;b&amp;gt;D26&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;[[Image:D2Xlogo.png‎]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;b&amp;gt;D38&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;[[Image:D3Xlogo.png‎]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
- 128*64 graphic of backlight LCD&amp;lt;br&amp;gt;&lt;br /&gt;
- 6 SIP accounts&amp;lt;br&amp;gt;&lt;br /&gt;
- Multi-Scene feature&amp;lt;br&amp;gt;&lt;br /&gt;
- 13 programmable keys&amp;lt;br&amp;gt;&lt;br /&gt;
- 2 line keys&amp;lt;br&amp;gt;&lt;br /&gt;
- PoE-Class 2&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;[https://www.atcom.cn/uploads/soft/190709/D2X-datasheet-EN.pdf D21 datasheet]&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
- 128*64 graphic of backlight LCD&amp;lt;br&amp;gt;&lt;br /&gt;
- 6 SIP accounts&amp;lt;br&amp;gt;&lt;br /&gt;
- Multi-Scene feature&amp;lt;br&amp;gt;&lt;br /&gt;
- 13 programmable keys&amp;lt;br&amp;gt;&lt;br /&gt;
- 2x Gigabit port &amp;lt;br&amp;gt;&lt;br /&gt;
- PoE-Class 2&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;[https://www.atcom.cn/uploads/soft/190709/D2X-datasheet-EN.pdf D26 datasheet]&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
- 2.4”TFT LCD, 320*240 pixel&amp;lt;br&amp;gt;&lt;br /&gt;
- 6 SIP accounts&amp;lt;br&amp;gt;&lt;br /&gt;
- 2x Gigabit Switch port&amp;lt;br&amp;gt;&lt;br /&gt;
- 13 programmable keys&amp;lt;br&amp;gt;&lt;br /&gt;
- 3 line keys&amp;lt;br&amp;gt;&lt;br /&gt;
- PoE-Class 2&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;[https://www.atcom.cn/uploads/soft/190709/D3X-datasheet-EN.pdf D38 datasheet]&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Functions==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Mandatory topic. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Give functional description about the product. Use formattings if needed --&amp;gt;&lt;br /&gt;
* Initiate outgoing call = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
* Answer incoming call = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
* Hold/Retrieve = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
* Transfer = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
* Conference &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
* Call waiting  = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
* Do not disturb = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
* Call Conference  = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt; &lt;br /&gt;
* Call Park  = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
* Voice Messages Center = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
* Call Forward and divert = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
* Intercom = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
* Dialed/Received/Missed/Forwarded call (400 total) = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
* Missed-call notification = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
* 1-touch speed dial = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
* Redial = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
* Zero touch provisioning, management, configuration and remote debugging  = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt; &lt;br /&gt;
* SIP &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
* Local Directory(up to 1000 total), remote xml phonebook, and LDAP = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
* Call Center Headsets mode&amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
* BLF = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
* SRTP = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
* DND = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
* Peer to peer call = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==innovaphone CTI ready==&lt;br /&gt;
&amp;lt;!-- Mandatory topic. --&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* Initiate outgoing call (automatic call with no manual intervention, update of called party, correct call direction in call list) yes/no&lt;br /&gt;
* Answer incoming call yes/no&lt;br /&gt;
* Hold/Retrieve yes/no&lt;br /&gt;
* Transfer yes/no&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==innovaphone Reverse Proxy ready==&lt;br /&gt;
&amp;lt;!-- Mandatory topic. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* STUN &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
* TURN  no ([https://wiki.innovaphone.com/index.php?title=Reference13r3:Concept_Third_Party_Phones not needed with 13r3])&lt;br /&gt;
* ICE  no ([https://wiki.innovaphone.com/index.php?title=Reference13r3:Concept_Third_Party_Phones not needed with 13r3])&lt;br /&gt;
* SIP/TCP &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
* SIP/TLS1.0,TLS1.1,TLS1.2 &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==innovaphone WebRTC ready==&lt;br /&gt;
&amp;lt;!-- Mandatory topic. --&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* Codec G.711 yes/no&lt;br /&gt;
* Codec OPUS yes/no&lt;br /&gt;
* DTLS encryption yes/no (RFC?)&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Supported Codecs==&lt;br /&gt;
&amp;lt;!-- Mandatory topic. --&amp;gt;&lt;br /&gt;
* G.722 &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
* G.711 A-law &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
* G.711 y-law &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
* G.729A/B/AB &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
* Opus &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==DTMF Support==&lt;br /&gt;
&amp;lt;!-- Mandatory topic. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* SIP v1 (RFC2543), v2 (RFC3261)&lt;br /&gt;
* DTMF: In-band, Out-of-band(RFC 2833) and SIP INFO&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Supports RFC3261 Digest Authentication Scheme (Section 22.4)==&lt;br /&gt;
&amp;lt;!-- Mandatory topic. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Supports RFC3261 Digest Authentication Scheme (Section 22.4) yes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Support LDAP Phonebook==&lt;br /&gt;
&amp;lt;!-- Mandatory topic. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Support LDAP Phonebook yes&lt;br /&gt;
For further informations please refer to this [http://test.atcom.cn/atcom/UserManual/ATCOM%20LDAP%20user%20manual.pdf LDAP Directory configuration guide]&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Ldap.png]]&lt;br /&gt;
&lt;br /&gt;
==Version==&lt;br /&gt;
&amp;lt;!-- Mandatory topic. --&amp;gt;&lt;br /&gt;
&amp;lt;!-- Give used versions for testing of both innovaphone and 3rd-pty product --&amp;gt;&lt;br /&gt;
&amp;lt;!-- If not present or outdated innovaphone FW is used, no certificate will be given at all --&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Product versions used for interop testing:&lt;br /&gt;
&amp;lt;!-- replace 3rd-Pty-Product by real name --&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;ATCOM D21&amp;amp;D26&#039;&#039;&#039; FW：V2.8.6.d5cb1&lt;br /&gt;
* &#039;&#039;&#039;ATCOM D38&#039;&#039;&#039; FW:V2.8.6.d5cb1&lt;br /&gt;
&amp;lt;!-- adjust used innovaphone FW, if applied add further applications (e.g. TAPI &amp;amp; Versions) --&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;innovaphone&#039;&#039;&#039; V13r3 beta4&lt;br /&gt;
* &#039;&#039;&#039;[http://download.atcom.cn/Report/Atcom-D26.pdf ATCOM Test report]&lt;br /&gt;
&lt;br /&gt;
==Configuration==&lt;br /&gt;
&amp;lt;!-- Mandatory topic. --&amp;gt;&lt;br /&gt;
&amp;lt;!-- Describe configuration steps to be done for both innovaphone and 3rd-pty product --&amp;gt;&lt;br /&gt;
&amp;lt;!-- If not present, no certificate will be given at all --&amp;gt;&lt;br /&gt;
&amp;lt;!-- you may either list the config steps by adding text &amp;amp; pictures, or provide the URL to a PDF-formatted config document. Ideally the document is hosted by the 3rd-party-supplier itself --&amp;gt;&lt;br /&gt;
&amp;lt;!-- in any case you must be aware of the fact that any questions concerning configuration issues will be directly forwarded by innovaphone to you as manufacturer --&amp;gt;&lt;br /&gt;
=== Register a SIP account ===&lt;br /&gt;
&lt;br /&gt;
First login to the phone webpage, then choose the Account1,&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Displayname:&#039;&#039;&#039; testphone1&amp;lt;br&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Register name:&#039;&#039;&#039; 6001(telephone number)&amp;lt;br&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;User name:&#039;&#039;&#039; 6001(telephone number)&amp;lt;br&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Password:&#039;&#039;&#039; 123 (as assigned in the innovaphone)&amp;lt;br&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;SIP server:&#039;&#039;&#039; 172.16.0.100 (IP Adress of the innovaphone) &amp;lt;br&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Port:&#039;&#039;&#039; 5060(the default port)&lt;br /&gt;
* &#039;&#039;&#039;Transport Type:&#039;&#039;&#039; UDP/TCP/TLS1.0,TLS1.1,TLS1.2 &lt;br /&gt;
Click on &amp;quot;&#039;&#039;&#039;Confirm&#039;&#039;&#039; &amp;quot; below.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Register.png]]&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;The phone configuration is now complete.&#039;&#039;&#039; Your ATCOM phone is now successfully registered on the innovaphone PBX and can make and receive calls.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Summary==&lt;br /&gt;
&amp;lt;!-- Optional topic. --&amp;gt;&lt;br /&gt;
&amp;lt;!-- Anything to mention which does not fit to above topics. To be deleted if not needed --&amp;gt; &lt;br /&gt;
&lt;br /&gt;
==Contact==&lt;br /&gt;
&amp;lt;!-- Mandatory topic. --&amp;gt;&lt;br /&gt;
&amp;lt;!-- Give contact details for potential interests. You may give personal or general contact data. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| Company Name: || ATCOM Technology co.,LTD.  &lt;br /&gt;
|-&lt;br /&gt;
| Street: || Building A, STECH park, No. 73 Liuxiancun Road, Xili Street, Nanshan District&lt;br /&gt;
|-&lt;br /&gt;
| ZIP/City: || Shenzhen, Guangzhou&lt;br /&gt;
|-&lt;br /&gt;
| Country: || China&lt;br /&gt;
|-&lt;br /&gt;
| Phone: || +86075583018618&lt;br /&gt;
|-&lt;br /&gt;
| Fax: || +86075583018618&lt;br /&gt;
|-&lt;br /&gt;
| Mail: || [mailto:support@atcom.com.cn support@atcom.cn]&lt;br /&gt;
|-&lt;br /&gt;
| Internet: || [https://www.atcom.cn www.atcom.cn]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Nfi</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Howto:Snom_IP_phones_-_Snom_-_3rd_Party_Product&amp;diff=66597</id>
		<title>Howto:Snom IP phones - Snom - 3rd Party Product</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Howto:Snom_IP_phones_-_Snom_-_3rd_Party_Product&amp;diff=66597"/>
		<updated>2023-03-22T14:44:03Z</updated>

		<summary type="html">&lt;p&gt;Nfi: /* innovaphone WebRTC ready */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:Snom logo gray 60.jpg|350px|right]]&lt;br /&gt;
&lt;br /&gt;
==Product name==&lt;br /&gt;
&amp;lt;!-- Mandatory topic. --&amp;gt;&lt;br /&gt;
&amp;lt;!-- replace CompanyName &amp;amp; ProductName by real names and add URL to productpage --&amp;gt;&lt;br /&gt;
Snom [https://service.snom.com/display/wiki/Desk+Phones VoIP Deskphones]&lt;br /&gt;
&lt;br /&gt;
==Certification Status==&lt;br /&gt;
{{Template:Compat_Status_referral_product_new}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Category==&lt;br /&gt;
[[Category:Referral Product|{{PAGENAME}}]]&lt;br /&gt;
{{Category:3rdParty_Terminal_Devices}}&lt;br /&gt;
[[Category:3rdParty_Terminal_Devices|{{PAGENAME}}]]&lt;br /&gt;
&lt;br /&gt;
==Vendor==&lt;br /&gt;
&amp;lt;!-- Mandatory topic. --&amp;gt;&lt;br /&gt;
&amp;lt;!-- Give some introducting words about the vendor itself --&amp;gt;&lt;br /&gt;
&amp;lt;!-- Place optional company logo. Don&#039;t change logo size. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:Snom logo gray 60.jpg|250px]] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;font size=5px&amp;gt;About us&amp;lt;/font&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Founded in 1997 and headquartered in Berlin, Germany, Snom is a German multinational corporation that manufactures the world’s first and leading brand of professional and enterprise VoIP telephones.&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td colspan=&amp;quot;5&amp;quot;&amp;gt;&amp;lt;b&amp;gt;&amp;lt;font size=4px&amp;gt;Desk phones&amp;lt;/font&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;b&amp;gt;D315&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;[[Image:Snom_d315_180x160.png‎|180px]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;b&amp;gt;D335&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;[[Image:Snom_d335_180x160.png‎‎‎|180px]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;b&amp;gt;D385&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;[[Image:Snom_d385_180x160.png‎|180px]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;b&amp;gt;D713&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;[[Image:Snom_d713_180x160.png|180px]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;strong&amp;gt;D717&amp;lt;br&amp;gt;&amp;lt;/strong&amp;gt;[[Image:Snom_d717_180x160.png‎|180px]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
- 3.2&amp;amp;quot; 300x100 pixel Hi-Res graphical display&amp;lt;br&amp;gt;&lt;br /&gt;
- 5 programmable function keys with red LEDs&amp;lt;br&amp;gt;&lt;br /&gt;
- 4 Sip Identites&amp;lt;br&amp;gt;&lt;br /&gt;
- 2x Gigabit Switch&amp;lt;br&amp;gt;&lt;br /&gt;
- USB Support&amp;lt;br&amp;gt;&lt;br /&gt;
- PoE-Class 2&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;D315 datasheet&amp;lt;/b&amp;gt; [https://service.snom.com/download/attachments/17370025/snom_D315_datasheet_en_1-1-1.pdf?version=1&amp;amp;amp;modificationDate=1556009668153&amp;amp;amp;api=v2]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
- 2.7&amp;amp;quot; 320x240 pixel Hi-Res TFT-color display&amp;lt;br&amp;gt;&lt;br /&gt;
- 8/32 programmable function keys with multicolor LEDs&amp;lt;br&amp;gt;&lt;br /&gt;
- 12 Sip Identites&amp;lt;br&amp;gt;&lt;br /&gt;
- 2x Gigabit Switch&amp;lt;br&amp;gt;&lt;br /&gt;
- USB Support&amp;lt;br&amp;gt;&lt;br /&gt;
- PoE-Class 2&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;D335 datasheet&amp;lt;/b&amp;gt;&lt;br /&gt;
[https://service.snom.com/download/attachments/17370025/snom_D335_datasheet_en_1-0-0.pdf?version=9&amp;amp;amp;modificationDate=1571915926325&amp;amp;amp;api=v2]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
- 4.3&amp;quot; 480x272 pixel Hi-Res TFT-color display&amp;lt;br&amp;gt;&lt;br /&gt;
- 12/48 programmable function keys with multicolor LEDs&amp;lt;br&amp;gt;&lt;br /&gt;
- 12 Sip Identites&amp;lt;br&amp;gt;&lt;br /&gt;
- 2x Gigabit Switch&amp;lt;br&amp;gt;&lt;br /&gt;
- USB Support&amp;lt;br&amp;gt;&lt;br /&gt;
- PoE-Class 3 &lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt; D385 datasheet&amp;lt;/b&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
    [https://service.snom.com/download/attachments/17370025/snom_D385_datasheet_en_1-0-0.pdf?version=1&amp;amp;amp;modificationDate=1556009676425&amp;amp;amp;api=v2]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
- 2.8&amp;quot; 320x240 pixel Hi-Res TFT-color display&amp;lt;br&amp;gt;&lt;br /&gt;
- 4 programmable function keys with multicolor LEDs&amp;lt;br&amp;gt;&lt;br /&gt;
- 6 Sip Identites&amp;lt;br&amp;gt;&lt;br /&gt;
- 2x Gigabit Switch&amp;lt;br&amp;gt;&lt;br /&gt;
- PoE-Class 3&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;D713 datasheet&amp;lt;/b&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
[https://service.snom.com/pages/viewpage.action?pageId=96960609]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
- 2.7&amp;quot; 320x240 pixel Hi-Res TFT-color display&amp;lt;br&amp;gt;&lt;br /&gt;
- 5 programmable function keys with red LEDs&amp;lt;br&amp;gt;&lt;br /&gt;
- 6 Sip Identites&amp;lt;br&amp;gt;&lt;br /&gt;
- 2x Gigabit Switch&amp;lt;br&amp;gt;&lt;br /&gt;
- USB Support&amp;lt;br&amp;gt;&lt;br /&gt;
- PoE-Class 2&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt; D717 datasheet&amp;lt;/b&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
    [https://service.snom.com/download/attachments/17370025/snom_D717_datasheet_en_1-2-0.pdf?version=1&amp;amp;amp;modificationDate=1571915760919&amp;amp;amp;api=v2]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;strong&amp;gt;D735&amp;lt;br&amp;gt;&amp;lt;/strong&amp;gt;[[Image:Snom_d735_180x160.png‎|180px]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;strong&amp;gt;D785&amp;lt;/strong&amp;gt;&amp;lt;br&amp;gt;[[Image:Snom_d785_180x160.png‎‎|180px]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;strong&amp;gt;D862&amp;lt;br&amp;gt;&amp;lt;/strong&amp;gt;[[Image:Snom_d862_180x160.png‎|210px]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;strong&amp;gt;D865&amp;lt;br&amp;gt;&amp;lt;/strong&amp;gt;[[Image:Snom_d865_180x160.png‎‎|210px]]&amp;lt;/td&amp;gt; &lt;br /&gt;
  &lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&lt;br /&gt;
- 2.7&amp;quot; 320x240 pixel Hi-Res TFT-color display&amp;lt;br&amp;gt;&lt;br /&gt;
- 8/32 programmable function keys with multicolor LEDs&amp;lt;br&amp;gt;&lt;br /&gt;
- 12 Sip Identites&amp;lt;br&amp;gt;&lt;br /&gt;
- 2x Gigabit Switch&amp;lt;br&amp;gt;&lt;br /&gt;
- USB Support&amp;lt;br&amp;gt;&lt;br /&gt;
- PoE-Class 2  &lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;D735 datasheet&amp;lt;/b&amp;gt; [https://service.snom.com/download/attachments/17370025/snom_D735_datasheet_en_1-4-0.pdf?version=1&amp;amp;amp;modificationDate=1571915768754&amp;amp;amp;api=v2] &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&lt;br /&gt;
- 2.7&amp;quot; 320x240 pixel Hi-Res TFT-color display&amp;lt;br&amp;gt;&lt;br /&gt;
- 8/32 programmable function keys with multicolor LEDs&amp;lt;br&amp;gt;&lt;br /&gt;
- 12 Sip Identites&amp;lt;br&amp;gt;&lt;br /&gt;
- 2x Gigabit Switch&amp;lt;br&amp;gt;&lt;br /&gt;
- USB Support&amp;lt;br&amp;gt;&lt;br /&gt;
- PoE-Class 2 &lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;D785 datasheet&amp;lt;/b&amp;gt; [https://service.snom.com/download/attachments/17370025/snom_D785_datasheet_en_2-2-0.pdf?version=1&amp;amp;amp;modificationDate=1571915775378&amp;amp;amp;api=v2] &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&lt;br /&gt;
- 5&amp;quot; High-resolution TFT-colour display 1280 x 720 pixels / 16:9&amp;lt;br&amp;gt;&lt;br /&gt;
- 8 programmable function keys with multicolor LEDs&amp;lt;br&amp;gt;&lt;br /&gt;
- 8 Sip Identites&lt;br /&gt;
- 2x Gigabit Switch&amp;lt;br&amp;gt;&lt;br /&gt;
- USB Support&amp;lt;br&amp;gt;&lt;br /&gt;
- PoE-Class 3&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;D862 datasheet&amp;lt;/b&amp;gt; [https://service.snom.com/display/wiki/D862+Datasheet+-+EN]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&lt;br /&gt;
- 5&amp;quot; High-resolution TFT-colour display 1280 x 720 pixels / 16:9&amp;lt;br&amp;gt;&lt;br /&gt;
- 10 programmable function keys with multicolor LEDs&amp;lt;br&amp;gt;&lt;br /&gt;
- 12 Sip Identites&amp;lt;br&amp;gt;&lt;br /&gt;
- 2x Gigabit Switch&amp;lt;br&amp;gt;&lt;br /&gt;
- USB Support&amp;lt;br&amp;gt;&lt;br /&gt;
- PoE-Class 3 &lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;D865 datasheet&amp;lt;/b&amp;gt; [https://service.snom.com/display/wiki/D865+Datasheet+-+EN] &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;strong&amp;gt;M110&amp;lt;br&amp;gt;&amp;lt;/strong&amp;gt;[[Image:Snom_M110_88x160.png‎‎|160px]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;strong&amp;gt;M430&amp;lt;/strong&amp;gt;&amp;lt;br&amp;gt;[[Image:Snom_M430_180x160.png‎‎‎|170px]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;strong&amp;gt;M900&amp;lt;br&amp;gt;&amp;lt;/strong&amp;gt;[[Image:Snom_M900_180x160.png|100px]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;strong&amp;gt;M900 Outdoors&amp;lt;br&amp;gt;&amp;lt;/strong&amp;gt;[[Image:Snom M900 outdoors 180x160.png‎|150px]]&amp;lt;/td&amp;gt; &lt;br /&gt;
  &lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&lt;br /&gt;
- DECT Single-Cell Base station + handset&amp;lt;br&amp;gt;&lt;br /&gt;
- 10 Sip Identites&amp;lt;br&amp;gt;&lt;br /&gt;
- 10 Handsets&amp;lt;br&amp;gt;&lt;br /&gt;
- 6 Simultaneous calls&amp;lt;br&amp;gt;&lt;br /&gt;
- Compatible handsets M10 SC&amp;lt;br&amp;gt;&lt;br /&gt;
- PoE-Class 2  &lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;M110 datasheet&amp;lt;/b&amp;gt; [https://www.snom.com/produkte/schnurlos-telefone/m-sc-serie/snom-m110-sc-bundle/] &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&lt;br /&gt;
- DECT Single-Cell Base station + handset&amp;lt;br&amp;gt;&lt;br /&gt;
- 20 Sip Identites&amp;lt;br&amp;gt;&lt;br /&gt;
- 20 Handsets&amp;lt;br&amp;gt;&lt;br /&gt;
- 10 Simultaneous calls&amp;lt;br&amp;gt;&lt;br /&gt;
- Compatible handsets M25,M30,M65,M85,M70,M80,M90&amp;lt;br&amp;gt;&lt;br /&gt;
- PoE-Class 2 &lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;M430 datasheet&amp;lt;/b&amp;gt; [https://www.snom.com/en/products/cordless-phones/m-series/snom-m430/] &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&lt;br /&gt;
- DECT Multi-Cell with up to 1,000 bases in a cluster&amp;lt;br&amp;gt;&lt;br /&gt;
- Up to 4,000 handsets in a cluster&amp;lt;br&amp;gt;&lt;br /&gt;
- 8 NB, 4 WB calls per M900 base&amp;lt;br&amp;gt;&lt;br /&gt;
- Compatible handsets M25,M30,M65,M85,M70,M80,M90&amp;lt;br&amp;gt;&lt;br /&gt;
- PoE-Class 2 &lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;M900 datasheet&amp;lt;/b&amp;gt; [https://www.snom.com/produkte/schnurlos-telefone/m-serie/snom-m900/]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&lt;br /&gt;
- Outdoors DECT Multi-Cell with up to 1,000 bases in a cluster&amp;lt;br&amp;gt;&lt;br /&gt;
- Up to 4,000 handsets in a cluster&amp;lt;br&amp;gt;&lt;br /&gt;
- 8 NB, 4 WB calls per M900 base&amp;lt;br&amp;gt;&lt;br /&gt;
- Compatible handsets M25,M30,M65,M85,M70,M80,M90&amp;lt;br&amp;gt;&lt;br /&gt;
- PoE-Class 2 &lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;M900 outdoors datasheet&amp;lt;/b&amp;gt; [https://www.snom.com/produkte/schnurlos-telefone/m-serie/snom-m900-outdoor/] &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Functions==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Mandatory topic. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Give functional description about the product. Use formattings if needed --&amp;gt;&lt;br /&gt;
* Initiate outgoing call = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
* Answer incoming call = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
* Hold/Retrieve = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
* Transfer = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
* Call waiting  = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
* Do not disturb = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
* Call Conference  = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt; ([https://service.snom.com/display/wiki/Ad-Hoc+Conference+-+V10 Snom - Ad-Hoc Conference])&lt;br /&gt;
* Call Park = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
* Voice Messages Center &lt;br /&gt;
* Call Forward and divert = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
* Intercom (HS to HS) = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
* Called, calling, and connected party information  = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
* Missed-call notification = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
* 1-touch speed dial = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
* Redial = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
* Zero touch provisioning, management, configuration and remote debugging  = &amp;lt;b&amp;gt;yes with SRAPS&amp;lt;/b&amp;gt; ( [https://service.snom.com/display/wiki/SRAPS See more informations here])&lt;br /&gt;
* SIP NATPR &lt;br /&gt;
* Background Upgrades  = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
* Dynamic Search of Network Based Directory = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
* BLF = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==innovaphone CTI ready==&lt;br /&gt;
* Initiate outgoing call (automatic call with no manual intervention, update of called party, correct call direction in call list) = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
* Hold/Retrieve = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
* Transfer = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==innovaphone Reverse Proxy ready==&lt;br /&gt;
&amp;lt;!-- Mandatory topic. --&amp;gt;&lt;br /&gt;
* STUN = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
* TURN = No ([https://wiki.innovaphone.com/index.php?title=Reference13r3:Concept_Third_Party_Phones not needed with 13r3])&lt;br /&gt;
* ICE = No ([https://wiki.innovaphone.com/index.php?title=Reference13r3:Concept_Third_Party_Phones not needed with 13r3])&lt;br /&gt;
* SIP/TCP = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
* SIP/TLS = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==innovaphone WebRTC ready==&lt;br /&gt;
&amp;lt;!-- Mandatory topic. --&amp;gt;&lt;br /&gt;
* Codec G.711 &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
* Codec OPUS &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
* DTLS encryption &amp;lt;b&amp;gt;no&amp;lt;/b&amp;gt; ([https://wiki.innovaphone.com/index.php?title=Reference13r3:Concept_Third_Party_Phones not needed with 13r3])&lt;br /&gt;
&lt;br /&gt;
==Supported Codecs==&lt;br /&gt;
&amp;lt;!-- Mandatory topic. --&amp;gt;&lt;br /&gt;
* G.722 = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
* G.711 A-law = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
* G.711 y-law = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
* G.723.1 = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
* G.729A = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
* Opus = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
==DTMF Support==&lt;br /&gt;
&amp;lt;!-- Mandatory topic. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* SIP v1 (RFC2543), v2 (RFC3261)&lt;br /&gt;
* DTMF: In-band, Out-of-band(RFC 2833) and SIP INFO&lt;br /&gt;
==Supports RFC3261 Digest Authentication Scheme (Section 22.4)==&lt;br /&gt;
&amp;lt;!-- Mandatory topic. --&amp;gt;&lt;br /&gt;
* Supports RFC3261 Digest Authentication Scheme (Section 22.4)&lt;br /&gt;
==Support LDAP Phonebook==&lt;br /&gt;
&amp;lt;!-- Mandatory topic. --&amp;gt;&lt;br /&gt;
* Support LDAP Phonebook = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For further informations please refer to this [https://service.snom.com/display/wiki/LDAP+Directory LDAP Directory configuration guide]&lt;br /&gt;
&lt;br /&gt;
[[Image:Screenshot-ldap1.png‎]]&lt;br /&gt;
&lt;br /&gt;
==Version==&lt;br /&gt;
&amp;lt;!-- Mandatory topic. --&amp;gt;&lt;br /&gt;
&amp;lt;!-- Give used versions for testing of both innovaphone and 3rd-pty product --&amp;gt;&lt;br /&gt;
&amp;lt;!-- If not present or outdated innovaphone FW is used, no certificate will be given at all --&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Product versions used for interop testing: / Produktversionen, die für Interop-Tests verwendet werden:&lt;br /&gt;
&amp;lt;!-- replace 3rd-Pty-Product by real name --&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Snom D315&#039;&#039;&#039; FW: 10.1.25.0&lt;br /&gt;
* &#039;&#039;&#039;Snom D345&#039;&#039;&#039; FW: 10.1.25.0&lt;br /&gt;
* &#039;&#039;&#039;Snom D715&#039;&#039;&#039; FW: 10.1.141.13&lt;br /&gt;
* &#039;&#039;&#039;Snom D735&#039;&#039;&#039; FW: 10.1.141.13&lt;br /&gt;
* &#039;&#039;&#039;Snom D785&#039;&#039;&#039; FW: 10.1.141.13&lt;br /&gt;
* &#039;&#039;&#039;Snom D862&#039;&#039;&#039; FW: 10.1.141.13&lt;br /&gt;
* &#039;&#039;&#039;Snom D865&#039;&#039;&#039; FW: 10.1.141.13&lt;br /&gt;
* &#039;&#039;&#039;Snom M100&#039;&#039;&#039; FW: M100KLE-1.0.5.2-0 Handsets: M10KLE-1.4.5.12-0&lt;br /&gt;
* &#039;&#039;&#039;Snom M400&#039;&#039;&#039; FW: 650 B2 Handsets: 650 B2&lt;br /&gt;
* &#039;&#039;&#039;Snom M900&#039;&#039;&#039; FW: 650 B2 Handsets: 650 B2&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Innovaphone IP811&#039;&#039;&#039; FW:13r3 final IPVA[13.7758]&lt;br /&gt;
* &#039;&#039;&#039;Innovaphone cloud&#039;&#039;&#039; FW:13r3 final IPVA[13.7758]&lt;br /&gt;
&lt;br /&gt;
== Konfiguration (German) == &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Informationen zum PBX-System===&lt;br /&gt;
Die hier verwendete PBX ist eine innovaphone IP811. Die Angaben sind jedoch auf die weiteren innovaphone Modelle übertragbar.&lt;br /&gt;
&lt;br /&gt;
Für die Sprachübertragung zwischen den VoIP-Komponenten wird das Protokoll SIP verwendet.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
=== Installation der innovaphone PBX ===&lt;br /&gt;
&lt;br /&gt;
//Verbinden Sie die linke &#039;&#039;&#039;ETH0&#039;&#039;&#039;-Buchse am Gerät über ein Ethernet-Kabel mit einem PoE-Switch. Sobald es an die Spannungsversorgung angeschlossen ist, wird das Gerät eingeschaltet und die LED Ready leuchtet.&lt;br /&gt;
[[Image:innovaphone Network Ports.png]]&lt;br /&gt;
&lt;br /&gt;
//Normalerweise erhält das Gerät eine IP-Adresse, die vom DHCP-Server im Netzwerk vergeben wird. Um auf die Web-Benutzeroberfläche zur Konfiguration der Telefonanlage zuzugreifen, geben Sie diese IP-Adresse in Ihren Webbrowser ein und geben Sie den Benutzernamen und das Passwort ein. &lt;br /&gt;
&lt;br /&gt;
Wenn Sie keinen DHCP-Server in Ihrem Netzwerk haben, können Sie auf das Gerät zugreifen, &lt;br /&gt;
indem Sie die MAC-Adresse in einen Browser (z.B. http: //0090331e16b8) eingeben oder das Gerät werkseitig zurücksetzen.&lt;br /&gt;
Nach dem Reset haben beide Ethernet-Ports statische IP-Adressen (http: //192.168.0.1 (ETH0) oder http: //192.168.1.1 (ETH1)).&lt;br /&gt;
 &lt;br /&gt;
[[Image:innovaphone Reset.png]]&lt;br /&gt;
 &lt;br /&gt;
Drücken Sie die Reset-Taste mit einem spitzen Gegenstand (z.B. einem Kugelschreiber).&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
=== Netzwerk konfigurieren ===&lt;br /&gt;
&lt;br /&gt;
Unter &amp;quot;&#039;&#039;&#039;IP4/ETH0/IP&#039;&#039;&#039;&amp;quot; können sie die Netzwerkeinstellungen für die erste Netzwerkkarte (&#039;&#039;&#039;ETH0&#039;&#039;&#039;) vornehmen. &lt;br /&gt;
&lt;br /&gt;
[[Image:innovaphone Network Settings.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Um es aktiv zu schalten muß man unter &amp;quot;&#039;&#039;&#039;IP4/ETH0/DHCP&#039;&#039;&#039;&amp;quot; zunächst den &amp;quot;&#039;&#039;&#039;DHCP&#039;&#039;&#039;&amp;quot; deaktivieren:&lt;br /&gt;
&lt;br /&gt;
[[Image:innovaphone DHCP Disable.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Anschließend ist ein Reset notwendig. Diesen kann man unter &amp;quot;&#039;&#039;&#039;Maintenance/Reset&#039;&#039;&#039;&amp;quot; veranlassen.&lt;br /&gt;
&lt;br /&gt;
[[Image:innovaphone Reset Setting.png]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
=== PBX Lizenz &amp;amp; Testmode ===&lt;br /&gt;
&lt;br /&gt;
Bevor Sie neue Telefone zu Ihrer innovaphone hinzufügen können, müssen Sie zunächst Ihre Lizenz aktivieren oder wenn sie es testen wollen ohne die Lizenz, den Testmode aktivieren.&lt;br /&gt;
&lt;br /&gt;
* Um Ihre Lizenz hochzuladen oder den Testmode zu aktivieren gehen sie zu &amp;quot;&#039;&#039;&#039;General/License&#039;&#039;&#039;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Image:innovaphone License Testmode.jpg]]&lt;br /&gt;
&lt;br /&gt;
* Wenn sie eine Lizenz haben klicken sie auf &amp;quot;&#039;&#039;&#039;Datei auswählen&#039;&#039;&#039;&amp;quot; und dann auf &amp;quot;&#039;&#039;&#039;upload&#039;&#039;&#039;&amp;quot;.&lt;br /&gt;
* Wenn Sie den Testmodus aktivieren möchten, drücken Sie &amp;quot;&#039;&#039;&#039;Testmodus&#039;&#039;&#039;&amp;quot;. Im Testmodus akzeptiert die innovaphone PBX Registrierungen für 8 Stunden.&lt;br /&gt;
Danach müssen Sie eine Lizenz hochladen oder den Testmodus erneut aktivieren.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== PBX Teilnehmer ===&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
Gehen sie zu &amp;quot;&#039;&#039;&#039;PBX/Ojects&#039;&#039;&#039;&amp;quot;, wählen &amp;quot;&#039;&#039;&#039;User&#039;&#039;&#039;&amp;quot; und klicken auf &amp;quot;&#039;&#039;&#039;show&#039;&#039;&#039;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Image:innovaphone PBX Objects Show.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Es erscheint die Übersicht aller User (Geräte).&lt;br /&gt;
&lt;br /&gt;
[[Image:innovaphone PBX Objects List.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nun klicken sie auf &amp;quot;&#039;&#039;&#039;new&#039;&#039;&#039;&amp;quot; und es erscheint folgendes Fenster:&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:innovaphone ip811 pbx General new user en sm.jpg]] &lt;br /&gt;
[[Image:Snom_WUI_Identity_Innovaphone_sm_de.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hier gilt es ein paar Dinge zu beachten:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Das Feld Number enthält die Telefonnummer. Diese tragen sie auch genau so im Webinterface (WUI) Ihres Snom Telefons ein unter &amp;quot;&#039;&#039;&#039;Identität 1&#039;&#039;&#039;&amp;quot; im Feld Account.&lt;br /&gt;
* Das Feld Passwort ist das gleiche das sie im Webinterface (WUI) Ihres Snom Telefons benötigen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration der SNOM Telefone ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bitte stellen Sie sicher, dass Ihr Telefon korrekt angeschlossen ist.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Zuerst packen Sie Ihr Snom Phone aus und stellen Sie es auf den Tisch.&lt;br /&gt;
* Verwenden Sie dazu das beiliegende Netzwerkkabel und verbinden Sie die Buchse &amp;quot;&#039;&#039;&#039;Net&#039;&#039;&#039;&amp;quot; Ihres Telefons mit Ihrem Netzwerk-Switch.&lt;br /&gt;
* Um Ihr Snom Phone mit Strom zu versorgen, benötigen Sie entweder einen Netzwerk-Switch mit &amp;quot;&#039;&#039;&#039;POE&#039;&#039;&#039;&amp;quot; (Power over Ethernet) oder ein geeignetes Snom-Netzteil.&lt;br /&gt;
 (in der Regel 5V - Keine Garantie für Schäden bei Verwendung eines externen Netzteils).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bitte überprüfen Sie vorab, ob auf Ihrem Telefon die neueste stabile Firmware-Version installiert ist.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Bitte besuchen sie hierfür unser Snom Service Hub: [https://service.snom.com/display/wiki/Firmware+Update+Center Firmware Update Center]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Snom Web-Benutzeroberfläche&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Da die automatische Bereitstellung von der innovaphone PBX nicht unterstützt wird, muss das Snom Telefon über seine Web-Benutzeroberfläche (WUI) eingerichtet werden. &lt;br /&gt;
* Um auf das Telefon zuzugreifen, geben Sie die IP-Adresse Ihres Telefons in Ihren Internet-Browser ein (z.B. http: //192.168.1.100). &lt;br /&gt;
* Um die IP-Adresse Ihres Telefons herauszufinden, drücken Sie die Konfigurationstaste (Zahnradsymbol) -&amp;gt; &amp;quot;&#039;&#039;&#039;Informationen&#039;&#039;&#039;&amp;quot; -&amp;gt; &amp;quot;&#039;&#039;&#039;Systeminformationen&#039;&#039;&#039;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Snom Identität konfigurieren ===&lt;br /&gt;
&lt;br /&gt;
Wählen Sie zunächst den Menüpunkt &amp;quot;&#039;&#039;&#039;Identität 1&#039;&#039;&#039;&amp;quot; auf der linken Seite und geben Sie die Benutzer-ID und das Passwort ein, die Sie in die innovaphone PBX eingegeben haben.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Angezeigter Name&#039;&#039;&#039;: testphone1 &lt;br /&gt;
* &#039;&#039;&#039;Nutzerkennung&#039;&#039;&#039;:  100 (Rufnummer) &lt;br /&gt;
* &#039;&#039;&#039;Passwort&#039;&#039;&#039;: 123 (wie in der innovaphone vergeben)&lt;br /&gt;
* &#039;&#039;&#039;Registrar&#039;&#039;&#039;: 192.168.100.250  (IP der innovaphone)&lt;br /&gt;
&lt;br /&gt;
Klicken sie unten auf &amp;quot;&#039;&#039;&#039;übernehmen&#039;&#039;&#039;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Image:innovaphone ip811 identity Login de.jpg]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ihr Snom Telefon ist nun erfolgreich an der innovaphone PBX registriert&#039;&#039;&#039; und kann Anrufe tätigen und entgegennehmen.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
=== Konfiguration der innovaphone sichern. ===&lt;br /&gt;
&lt;br /&gt;
Sie können die Konfiguration Ihrer innovaphone in einer Config Datei Exportieren.&lt;br /&gt;
Gehen sie dafür zu &amp;quot;&#039;&#039;&#039;Maintenance/Diagnostics/Config-Show&#039;&#039;&#039;&amp;quot;. Dort wird Ihnen eine komplette Liste angezeigt. Markieren sie die ganze Liste von oben nach unten und kopieren den Inhalt in eine Textdatei.&lt;br /&gt;
&lt;br /&gt;
[[Image:innovaphone Config Show.png]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
=== Zurücksetzen der innovaphone PBX ===&lt;br /&gt;
Sollte es aus irgendeinem Grund notwendig erscheinen die innovaphone PBX neuzustarten oder auf Werkseinstellung zurückzusetzten, zeigen wir ihnen hier wie das geht:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Neustart mit Erhalt der Konfigurationsdaten:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Durch einen kurzen &#039;&#039;&#039;Reset&#039;&#039;&#039; wird das Gerät neu gestartet. Der Reset-Knopf darf dabei &#039;&#039;&#039;nicht länger als eine Sekunde&#039;&#039;&#039; gedrückt werden.&lt;br /&gt;
 &lt;br /&gt;
[[Image:innovaphone Reset.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Neustart mit Rücksetzen der Konfiguration auf Werkseinstellungen:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Hierzu wird ein langer Reset durchgeführt, wobei der Reset- Knopf länger als 20 Sekunden gedrückt wird. &lt;br /&gt;
  Dadurch wird der Flash-Speicher des Gerätes gelöscht und dieses auf die Werkseinstellungen zurückgesetzt.&lt;br /&gt;
* Anschließend wechselt es in den TFTP-Modus. Je nach Größe und Nutzung des Flash-Speichers kann dieser Vorgang bis zu 60 Sekunden dauern. &lt;br /&gt;
  Die LED des Geräts flackert solange, bis der Speicher komplett gelöschtwurde.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Bitte führen Sie währenddessen keinen erneuten Reset durch und unterbrechen Sie die Stromversorgung nicht.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Wenn das Flackern erloschen ist und die LED rot leuchtet, dann bitte kurz dasGerät von der Stromversorgung trennen.&lt;br /&gt;
* Das Gerät ist nun im Werkszustand und kann wieder über seine IP-Adresse oder die NetBIOS-Methode erreicht werden.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
=== Wiederherstellen der Konfiguration ===&lt;br /&gt;
&lt;br /&gt;
Wenn Sie über den Browser auf das Admin-UI zugreifen, gehen Sie bitte zu &amp;quot;&#039;&#039;&#039;Maintenance/Upload/Config&#039;&#039;&#039;&amp;quot; und laden Sie die Backup-Konfigurationsdatei hoch.&lt;br /&gt;
&lt;br /&gt;
[[Image:innovaphone Upload Config.png]]&lt;br /&gt;
&lt;br /&gt;
* Evtl. kommt eine Meldung, &amp;quot;&#039;&#039;&#039;Lines skipped&#039;&#039;&#039;&amp;quot;, das können sie ignorieren.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Anschließend führen sie wie verlangt einen Reset der Box aus (Klick auf Reset Button). &lt;br /&gt;
&lt;br /&gt;
[[Image:innovaphone Upload Config Reset sm.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nach dem Neustart hat die innovaphone PBX die wiederhergestellte Konfiguration.&lt;br /&gt;
&lt;br /&gt;
[[Image:innovaphone General Info sm.png]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Configuration (English) ==&lt;br /&gt;
&lt;br /&gt;
===Information about the PBX system===&lt;br /&gt;
The PBX used here is an innovaphone IP811. However, the specifications are transferable to the other innovaphone models.&lt;br /&gt;
&lt;br /&gt;
The SIP protocol is used for voice transmission between the VoIP components.&lt;br /&gt;
&lt;br /&gt;
=== PBX User / Extension ===&lt;br /&gt;
&lt;br /&gt;
[[Image:innovaphone ip811 pbx General new user en sm.jpg]] &lt;br /&gt;
[[Image:Snom WUI Identity innovaphone sm en.jpg]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;There are a few things to consider here:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* The &amp;quot;&#039;&#039;&#039;Number&#039;&#039;&#039;&amp;quot; field contains the telephone number. This same number is used in the &amp;quot;&#039;&#039;&#039;Account Field&#039;&#039;&#039;&amp;quot; in the web interface (WUI) of your snom phone under &amp;quot;&#039;&#039;&#039;Identity 1&#039;&#039;&#039;&amp;quot;.&lt;br /&gt;
* Please provide a strong enough password for the account.&lt;br /&gt;
&lt;br /&gt;
=== Configuration of the Snom phone ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Please make sure your phone is set up correctly.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* First of all, unpack your Snom Phone and put it on the table.&lt;br /&gt;
* To connect it use the enclosednetwork cable and connect the &amp;quot;&#039;&#039;&#039;Net&#039;&#039;&#039;&amp;quot; socket of your telephone to your network switch.&lt;br /&gt;
* To get power for your Snom Phone either a network switch with &amp;quot;&#039;&#039;&#039;POE&#039;&#039;&#039;&amp;quot; (Power over Ethernet) or a suitable Snom power supply unit&lt;br /&gt;
    (usually 5V - No guarantee for damage when using an external power supply).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Please check in advance that your phone has the latest stable firmware version installed.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Have a look on our Snom Wiki: [http://wiki.snom.com/Firmware Snom Firmware Guide]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Enter Snom Webinterface&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 Since auto provisioning is not supported by the innovaphone PBX, the Snom Phone needs to be set up using its web user interface (WUI). &lt;br /&gt;
 To access the phone, type the IP address of your phone into your internet browser (e.g. http: //192.168.1.100).&lt;br /&gt;
 To find out the IP address of your phone press the Configuration key (gear wheel symbol) -&amp;gt; &amp;quot;&#039;&#039;&#039;Information&#039;&#039;&#039;&amp;quot; -&amp;gt; &amp;quot;&#039;&#039;&#039;System information&#039;&#039;&#039;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Register a SIP account ===&lt;br /&gt;
&lt;br /&gt;
First select the &amp;quot; &#039;&#039;&#039;Identity 1&#039;&#039;&#039; &amp;quot; menu item on the left-hand side and enter the user ID and password you entered into the innovaphone PBX.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Displayname:&#039;&#039;&#039; testphone1&lt;br /&gt;
* &#039;&#039;&#039;Account:&#039;&#039;&#039; 100 (telephone number)&lt;br /&gt;
* &#039;&#039;&#039;Password:&#039;&#039;&#039; 123 (as assigned in the innovaphone)&lt;br /&gt;
* &#039;&#039;&#039;Registrar:&#039;&#039;&#039; 192.168.100.250 (IP Adress of the innovaphone) &lt;br /&gt;
&lt;br /&gt;
Click on &amp;quot;&#039;&#039;&#039;apply&#039;&#039;&#039; &amp;quot; below.&lt;br /&gt;
&lt;br /&gt;
[[Image:innovaphone ip811 identity Login en.jpg]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;The phone configuration is now complete.&#039;&#039;&#039; Your Snom phone is now successfully registered on the innovaphone PBX and can make and receive calls.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Contact Details==&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| Company Name: || Snom Technology GmbH&lt;br /&gt;
|-&lt;br /&gt;
| Street: || Wittestraße 30 G&lt;br /&gt;
|-&lt;br /&gt;
| ZIP/City: || 13509 Berlin&lt;br /&gt;
|-&lt;br /&gt;
| Country: || Germany&lt;br /&gt;
|-&lt;br /&gt;
| Phone: || +49 30 39833-0&lt;br /&gt;
|-&lt;br /&gt;
| Fax: || +49 30 39833-111&lt;br /&gt;
|-&lt;br /&gt;
| Mail: || [mailto:officemanagement@snom.com officemanagement@snom.com]&lt;br /&gt;
|-&lt;br /&gt;
| Internet: || [https://www.snom.com Snom Technology GmbH]&lt;br /&gt;
|-&lt;br /&gt;
| Contact: || [https://www.snom.com/de/kontakt/ Snom contact]&lt;br /&gt;
|-&lt;br /&gt;
| Support: || [https://service.snom.com Snom Service Hub]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Nfi</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Howto:Snom_IP_phones_-_Snom_-_3rd_Party_Product&amp;diff=66596</id>
		<title>Howto:Snom IP phones - Snom - 3rd Party Product</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Howto:Snom_IP_phones_-_Snom_-_3rd_Party_Product&amp;diff=66596"/>
		<updated>2023-03-22T13:23:31Z</updated>

		<summary type="html">&lt;p&gt;Nfi: /* innovaphone Reverse Proxy ready */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:Snom logo gray 60.jpg|350px|right]]&lt;br /&gt;
&lt;br /&gt;
==Product name==&lt;br /&gt;
&amp;lt;!-- Mandatory topic. --&amp;gt;&lt;br /&gt;
&amp;lt;!-- replace CompanyName &amp;amp; ProductName by real names and add URL to productpage --&amp;gt;&lt;br /&gt;
Snom [https://service.snom.com/display/wiki/Desk+Phones VoIP Deskphones]&lt;br /&gt;
&lt;br /&gt;
==Certification Status==&lt;br /&gt;
{{Template:Compat_Status_referral_product_new}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Category==&lt;br /&gt;
[[Category:Referral Product|{{PAGENAME}}]]&lt;br /&gt;
{{Category:3rdParty_Terminal_Devices}}&lt;br /&gt;
[[Category:3rdParty_Terminal_Devices|{{PAGENAME}}]]&lt;br /&gt;
&lt;br /&gt;
==Vendor==&lt;br /&gt;
&amp;lt;!-- Mandatory topic. --&amp;gt;&lt;br /&gt;
&amp;lt;!-- Give some introducting words about the vendor itself --&amp;gt;&lt;br /&gt;
&amp;lt;!-- Place optional company logo. Don&#039;t change logo size. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:Snom logo gray 60.jpg|250px]] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;font size=5px&amp;gt;About us&amp;lt;/font&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Founded in 1997 and headquartered in Berlin, Germany, Snom is a German multinational corporation that manufactures the world’s first and leading brand of professional and enterprise VoIP telephones.&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td colspan=&amp;quot;5&amp;quot;&amp;gt;&amp;lt;b&amp;gt;&amp;lt;font size=4px&amp;gt;Desk phones&amp;lt;/font&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;b&amp;gt;D315&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;[[Image:Snom_d315_180x160.png‎|180px]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;b&amp;gt;D335&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;[[Image:Snom_d335_180x160.png‎‎‎|180px]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;b&amp;gt;D385&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;[[Image:Snom_d385_180x160.png‎|180px]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;b&amp;gt;D713&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;[[Image:Snom_d713_180x160.png|180px]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;strong&amp;gt;D717&amp;lt;br&amp;gt;&amp;lt;/strong&amp;gt;[[Image:Snom_d717_180x160.png‎|180px]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
- 3.2&amp;amp;quot; 300x100 pixel Hi-Res graphical display&amp;lt;br&amp;gt;&lt;br /&gt;
- 5 programmable function keys with red LEDs&amp;lt;br&amp;gt;&lt;br /&gt;
- 4 Sip Identites&amp;lt;br&amp;gt;&lt;br /&gt;
- 2x Gigabit Switch&amp;lt;br&amp;gt;&lt;br /&gt;
- USB Support&amp;lt;br&amp;gt;&lt;br /&gt;
- PoE-Class 2&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;D315 datasheet&amp;lt;/b&amp;gt; [https://service.snom.com/download/attachments/17370025/snom_D315_datasheet_en_1-1-1.pdf?version=1&amp;amp;amp;modificationDate=1556009668153&amp;amp;amp;api=v2]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
- 2.7&amp;amp;quot; 320x240 pixel Hi-Res TFT-color display&amp;lt;br&amp;gt;&lt;br /&gt;
- 8/32 programmable function keys with multicolor LEDs&amp;lt;br&amp;gt;&lt;br /&gt;
- 12 Sip Identites&amp;lt;br&amp;gt;&lt;br /&gt;
- 2x Gigabit Switch&amp;lt;br&amp;gt;&lt;br /&gt;
- USB Support&amp;lt;br&amp;gt;&lt;br /&gt;
- PoE-Class 2&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;D335 datasheet&amp;lt;/b&amp;gt;&lt;br /&gt;
[https://service.snom.com/download/attachments/17370025/snom_D335_datasheet_en_1-0-0.pdf?version=9&amp;amp;amp;modificationDate=1571915926325&amp;amp;amp;api=v2]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
- 4.3&amp;quot; 480x272 pixel Hi-Res TFT-color display&amp;lt;br&amp;gt;&lt;br /&gt;
- 12/48 programmable function keys with multicolor LEDs&amp;lt;br&amp;gt;&lt;br /&gt;
- 12 Sip Identites&amp;lt;br&amp;gt;&lt;br /&gt;
- 2x Gigabit Switch&amp;lt;br&amp;gt;&lt;br /&gt;
- USB Support&amp;lt;br&amp;gt;&lt;br /&gt;
- PoE-Class 3 &lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt; D385 datasheet&amp;lt;/b&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
    [https://service.snom.com/download/attachments/17370025/snom_D385_datasheet_en_1-0-0.pdf?version=1&amp;amp;amp;modificationDate=1556009676425&amp;amp;amp;api=v2]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
- 2.8&amp;quot; 320x240 pixel Hi-Res TFT-color display&amp;lt;br&amp;gt;&lt;br /&gt;
- 4 programmable function keys with multicolor LEDs&amp;lt;br&amp;gt;&lt;br /&gt;
- 6 Sip Identites&amp;lt;br&amp;gt;&lt;br /&gt;
- 2x Gigabit Switch&amp;lt;br&amp;gt;&lt;br /&gt;
- PoE-Class 3&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;D713 datasheet&amp;lt;/b&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
[https://service.snom.com/pages/viewpage.action?pageId=96960609]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
- 2.7&amp;quot; 320x240 pixel Hi-Res TFT-color display&amp;lt;br&amp;gt;&lt;br /&gt;
- 5 programmable function keys with red LEDs&amp;lt;br&amp;gt;&lt;br /&gt;
- 6 Sip Identites&amp;lt;br&amp;gt;&lt;br /&gt;
- 2x Gigabit Switch&amp;lt;br&amp;gt;&lt;br /&gt;
- USB Support&amp;lt;br&amp;gt;&lt;br /&gt;
- PoE-Class 2&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt; D717 datasheet&amp;lt;/b&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
    [https://service.snom.com/download/attachments/17370025/snom_D717_datasheet_en_1-2-0.pdf?version=1&amp;amp;amp;modificationDate=1571915760919&amp;amp;amp;api=v2]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;strong&amp;gt;D735&amp;lt;br&amp;gt;&amp;lt;/strong&amp;gt;[[Image:Snom_d735_180x160.png‎|180px]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;strong&amp;gt;D785&amp;lt;/strong&amp;gt;&amp;lt;br&amp;gt;[[Image:Snom_d785_180x160.png‎‎|180px]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;strong&amp;gt;D862&amp;lt;br&amp;gt;&amp;lt;/strong&amp;gt;[[Image:Snom_d862_180x160.png‎|210px]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;strong&amp;gt;D865&amp;lt;br&amp;gt;&amp;lt;/strong&amp;gt;[[Image:Snom_d865_180x160.png‎‎|210px]]&amp;lt;/td&amp;gt; &lt;br /&gt;
  &lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&lt;br /&gt;
- 2.7&amp;quot; 320x240 pixel Hi-Res TFT-color display&amp;lt;br&amp;gt;&lt;br /&gt;
- 8/32 programmable function keys with multicolor LEDs&amp;lt;br&amp;gt;&lt;br /&gt;
- 12 Sip Identites&amp;lt;br&amp;gt;&lt;br /&gt;
- 2x Gigabit Switch&amp;lt;br&amp;gt;&lt;br /&gt;
- USB Support&amp;lt;br&amp;gt;&lt;br /&gt;
- PoE-Class 2  &lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;D735 datasheet&amp;lt;/b&amp;gt; [https://service.snom.com/download/attachments/17370025/snom_D735_datasheet_en_1-4-0.pdf?version=1&amp;amp;amp;modificationDate=1571915768754&amp;amp;amp;api=v2] &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&lt;br /&gt;
- 2.7&amp;quot; 320x240 pixel Hi-Res TFT-color display&amp;lt;br&amp;gt;&lt;br /&gt;
- 8/32 programmable function keys with multicolor LEDs&amp;lt;br&amp;gt;&lt;br /&gt;
- 12 Sip Identites&amp;lt;br&amp;gt;&lt;br /&gt;
- 2x Gigabit Switch&amp;lt;br&amp;gt;&lt;br /&gt;
- USB Support&amp;lt;br&amp;gt;&lt;br /&gt;
- PoE-Class 2 &lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;D785 datasheet&amp;lt;/b&amp;gt; [https://service.snom.com/download/attachments/17370025/snom_D785_datasheet_en_2-2-0.pdf?version=1&amp;amp;amp;modificationDate=1571915775378&amp;amp;amp;api=v2] &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&lt;br /&gt;
- 5&amp;quot; High-resolution TFT-colour display 1280 x 720 pixels / 16:9&amp;lt;br&amp;gt;&lt;br /&gt;
- 8 programmable function keys with multicolor LEDs&amp;lt;br&amp;gt;&lt;br /&gt;
- 8 Sip Identites&lt;br /&gt;
- 2x Gigabit Switch&amp;lt;br&amp;gt;&lt;br /&gt;
- USB Support&amp;lt;br&amp;gt;&lt;br /&gt;
- PoE-Class 3&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;D862 datasheet&amp;lt;/b&amp;gt; [https://service.snom.com/display/wiki/D862+Datasheet+-+EN]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&lt;br /&gt;
- 5&amp;quot; High-resolution TFT-colour display 1280 x 720 pixels / 16:9&amp;lt;br&amp;gt;&lt;br /&gt;
- 10 programmable function keys with multicolor LEDs&amp;lt;br&amp;gt;&lt;br /&gt;
- 12 Sip Identites&amp;lt;br&amp;gt;&lt;br /&gt;
- 2x Gigabit Switch&amp;lt;br&amp;gt;&lt;br /&gt;
- USB Support&amp;lt;br&amp;gt;&lt;br /&gt;
- PoE-Class 3 &lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;D865 datasheet&amp;lt;/b&amp;gt; [https://service.snom.com/display/wiki/D865+Datasheet+-+EN] &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;strong&amp;gt;M110&amp;lt;br&amp;gt;&amp;lt;/strong&amp;gt;[[Image:Snom_M110_88x160.png‎‎|160px]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;strong&amp;gt;M430&amp;lt;/strong&amp;gt;&amp;lt;br&amp;gt;[[Image:Snom_M430_180x160.png‎‎‎|170px]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;strong&amp;gt;M900&amp;lt;br&amp;gt;&amp;lt;/strong&amp;gt;[[Image:Snom_M900_180x160.png|100px]]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;strong&amp;gt;M900 Outdoors&amp;lt;br&amp;gt;&amp;lt;/strong&amp;gt;[[Image:Snom M900 outdoors 180x160.png‎|150px]]&amp;lt;/td&amp;gt; &lt;br /&gt;
  &lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&lt;br /&gt;
- DECT Single-Cell Base station + handset&amp;lt;br&amp;gt;&lt;br /&gt;
- 10 Sip Identites&amp;lt;br&amp;gt;&lt;br /&gt;
- 10 Handsets&amp;lt;br&amp;gt;&lt;br /&gt;
- 6 Simultaneous calls&amp;lt;br&amp;gt;&lt;br /&gt;
- Compatible handsets M10 SC&amp;lt;br&amp;gt;&lt;br /&gt;
- PoE-Class 2  &lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;M110 datasheet&amp;lt;/b&amp;gt; [https://www.snom.com/produkte/schnurlos-telefone/m-sc-serie/snom-m110-sc-bundle/] &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&lt;br /&gt;
- DECT Single-Cell Base station + handset&amp;lt;br&amp;gt;&lt;br /&gt;
- 20 Sip Identites&amp;lt;br&amp;gt;&lt;br /&gt;
- 20 Handsets&amp;lt;br&amp;gt;&lt;br /&gt;
- 10 Simultaneous calls&amp;lt;br&amp;gt;&lt;br /&gt;
- Compatible handsets M25,M30,M65,M85,M70,M80,M90&amp;lt;br&amp;gt;&lt;br /&gt;
- PoE-Class 2 &lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;M430 datasheet&amp;lt;/b&amp;gt; [https://www.snom.com/en/products/cordless-phones/m-series/snom-m430/] &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&lt;br /&gt;
- DECT Multi-Cell with up to 1,000 bases in a cluster&amp;lt;br&amp;gt;&lt;br /&gt;
- Up to 4,000 handsets in a cluster&amp;lt;br&amp;gt;&lt;br /&gt;
- 8 NB, 4 WB calls per M900 base&amp;lt;br&amp;gt;&lt;br /&gt;
- Compatible handsets M25,M30,M65,M85,M70,M80,M90&amp;lt;br&amp;gt;&lt;br /&gt;
- PoE-Class 2 &lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;M900 datasheet&amp;lt;/b&amp;gt; [https://www.snom.com/produkte/schnurlos-telefone/m-serie/snom-m900/]&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&lt;br /&gt;
- Outdoors DECT Multi-Cell with up to 1,000 bases in a cluster&amp;lt;br&amp;gt;&lt;br /&gt;
- Up to 4,000 handsets in a cluster&amp;lt;br&amp;gt;&lt;br /&gt;
- 8 NB, 4 WB calls per M900 base&amp;lt;br&amp;gt;&lt;br /&gt;
- Compatible handsets M25,M30,M65,M85,M70,M80,M90&amp;lt;br&amp;gt;&lt;br /&gt;
- PoE-Class 2 &lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;M900 outdoors datasheet&amp;lt;/b&amp;gt; [https://www.snom.com/produkte/schnurlos-telefone/m-serie/snom-m900-outdoor/] &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Functions==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Mandatory topic. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Give functional description about the product. Use formattings if needed --&amp;gt;&lt;br /&gt;
* Initiate outgoing call = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
* Answer incoming call = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
* Hold/Retrieve = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
* Transfer = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
* Call waiting  = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
* Do not disturb = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
* Call Conference  = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt; ([https://service.snom.com/display/wiki/Ad-Hoc+Conference+-+V10 Snom - Ad-Hoc Conference])&lt;br /&gt;
* Call Park = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
* Voice Messages Center &lt;br /&gt;
* Call Forward and divert = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
* Intercom (HS to HS) = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
* Called, calling, and connected party information  = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
* Missed-call notification = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
* 1-touch speed dial = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
* Redial = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
* Zero touch provisioning, management, configuration and remote debugging  = &amp;lt;b&amp;gt;yes with SRAPS&amp;lt;/b&amp;gt; ( [https://service.snom.com/display/wiki/SRAPS See more informations here])&lt;br /&gt;
* SIP NATPR &lt;br /&gt;
* Background Upgrades  = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
* Dynamic Search of Network Based Directory = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
* BLF = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==innovaphone CTI ready==&lt;br /&gt;
* Initiate outgoing call (automatic call with no manual intervention, update of called party, correct call direction in call list) = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
* Hold/Retrieve = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
* Transfer = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==innovaphone Reverse Proxy ready==&lt;br /&gt;
&amp;lt;!-- Mandatory topic. --&amp;gt;&lt;br /&gt;
* STUN = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
* TURN = No ([https://wiki.innovaphone.com/index.php?title=Reference13r3:Concept_Third_Party_Phones not needed with 13r3])&lt;br /&gt;
* ICE = No ([https://wiki.innovaphone.com/index.php?title=Reference13r3:Concept_Third_Party_Phones not needed with 13r3])&lt;br /&gt;
* SIP/TCP = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
* SIP/TLS = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==innovaphone WebRTC ready==&lt;br /&gt;
&amp;lt;!-- Mandatory topic. --&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* Codec G.711 yes/no&lt;br /&gt;
* Codec OPUS yes/no&lt;br /&gt;
* DTLS encryption yes/no (RFC?)&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
==Supported Codecs==&lt;br /&gt;
&amp;lt;!-- Mandatory topic. --&amp;gt;&lt;br /&gt;
* G.722 = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
* G.711 A-law = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
* G.711 y-law = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
* G.723.1 = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
* G.729A = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
* Opus = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
==DTMF Support==&lt;br /&gt;
&amp;lt;!-- Mandatory topic. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* SIP v1 (RFC2543), v2 (RFC3261)&lt;br /&gt;
* DTMF: In-band, Out-of-band(RFC 2833) and SIP INFO&lt;br /&gt;
==Supports RFC3261 Digest Authentication Scheme (Section 22.4)==&lt;br /&gt;
&amp;lt;!-- Mandatory topic. --&amp;gt;&lt;br /&gt;
* Supports RFC3261 Digest Authentication Scheme (Section 22.4)&lt;br /&gt;
==Support LDAP Phonebook==&lt;br /&gt;
&amp;lt;!-- Mandatory topic. --&amp;gt;&lt;br /&gt;
* Support LDAP Phonebook = &amp;lt;b&amp;gt;yes&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For further informations please refer to this [https://service.snom.com/display/wiki/LDAP+Directory LDAP Directory configuration guide]&lt;br /&gt;
&lt;br /&gt;
[[Image:Screenshot-ldap1.png‎]]&lt;br /&gt;
&lt;br /&gt;
==Version==&lt;br /&gt;
&amp;lt;!-- Mandatory topic. --&amp;gt;&lt;br /&gt;
&amp;lt;!-- Give used versions for testing of both innovaphone and 3rd-pty product --&amp;gt;&lt;br /&gt;
&amp;lt;!-- If not present or outdated innovaphone FW is used, no certificate will be given at all --&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Product versions used for interop testing: / Produktversionen, die für Interop-Tests verwendet werden:&lt;br /&gt;
&amp;lt;!-- replace 3rd-Pty-Product by real name --&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Snom D315&#039;&#039;&#039; FW: 10.1.25.0&lt;br /&gt;
* &#039;&#039;&#039;Snom D345&#039;&#039;&#039; FW: 10.1.25.0&lt;br /&gt;
* &#039;&#039;&#039;Snom D715&#039;&#039;&#039; FW: 10.1.141.13&lt;br /&gt;
* &#039;&#039;&#039;Snom D735&#039;&#039;&#039; FW: 10.1.141.13&lt;br /&gt;
* &#039;&#039;&#039;Snom D785&#039;&#039;&#039; FW: 10.1.141.13&lt;br /&gt;
* &#039;&#039;&#039;Snom D862&#039;&#039;&#039; FW: 10.1.141.13&lt;br /&gt;
* &#039;&#039;&#039;Snom D865&#039;&#039;&#039; FW: 10.1.141.13&lt;br /&gt;
* &#039;&#039;&#039;Snom M100&#039;&#039;&#039; FW: M100KLE-1.0.5.2-0 Handsets: M10KLE-1.4.5.12-0&lt;br /&gt;
* &#039;&#039;&#039;Snom M400&#039;&#039;&#039; FW: 650 B2 Handsets: 650 B2&lt;br /&gt;
* &#039;&#039;&#039;Snom M900&#039;&#039;&#039; FW: 650 B2 Handsets: 650 B2&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Innovaphone IP811&#039;&#039;&#039; FW:13r3 final IPVA[13.7758]&lt;br /&gt;
* &#039;&#039;&#039;Innovaphone cloud&#039;&#039;&#039; FW:13r3 final IPVA[13.7758]&lt;br /&gt;
&lt;br /&gt;
== Konfiguration (German) == &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Informationen zum PBX-System===&lt;br /&gt;
Die hier verwendete PBX ist eine innovaphone IP811. Die Angaben sind jedoch auf die weiteren innovaphone Modelle übertragbar.&lt;br /&gt;
&lt;br /&gt;
Für die Sprachübertragung zwischen den VoIP-Komponenten wird das Protokoll SIP verwendet.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
=== Installation der innovaphone PBX ===&lt;br /&gt;
&lt;br /&gt;
//Verbinden Sie die linke &#039;&#039;&#039;ETH0&#039;&#039;&#039;-Buchse am Gerät über ein Ethernet-Kabel mit einem PoE-Switch. Sobald es an die Spannungsversorgung angeschlossen ist, wird das Gerät eingeschaltet und die LED Ready leuchtet.&lt;br /&gt;
[[Image:innovaphone Network Ports.png]]&lt;br /&gt;
&lt;br /&gt;
//Normalerweise erhält das Gerät eine IP-Adresse, die vom DHCP-Server im Netzwerk vergeben wird. Um auf die Web-Benutzeroberfläche zur Konfiguration der Telefonanlage zuzugreifen, geben Sie diese IP-Adresse in Ihren Webbrowser ein und geben Sie den Benutzernamen und das Passwort ein. &lt;br /&gt;
&lt;br /&gt;
Wenn Sie keinen DHCP-Server in Ihrem Netzwerk haben, können Sie auf das Gerät zugreifen, &lt;br /&gt;
indem Sie die MAC-Adresse in einen Browser (z.B. http: //0090331e16b8) eingeben oder das Gerät werkseitig zurücksetzen.&lt;br /&gt;
Nach dem Reset haben beide Ethernet-Ports statische IP-Adressen (http: //192.168.0.1 (ETH0) oder http: //192.168.1.1 (ETH1)).&lt;br /&gt;
 &lt;br /&gt;
[[Image:innovaphone Reset.png]]&lt;br /&gt;
 &lt;br /&gt;
Drücken Sie die Reset-Taste mit einem spitzen Gegenstand (z.B. einem Kugelschreiber).&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
=== Netzwerk konfigurieren ===&lt;br /&gt;
&lt;br /&gt;
Unter &amp;quot;&#039;&#039;&#039;IP4/ETH0/IP&#039;&#039;&#039;&amp;quot; können sie die Netzwerkeinstellungen für die erste Netzwerkkarte (&#039;&#039;&#039;ETH0&#039;&#039;&#039;) vornehmen. &lt;br /&gt;
&lt;br /&gt;
[[Image:innovaphone Network Settings.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Um es aktiv zu schalten muß man unter &amp;quot;&#039;&#039;&#039;IP4/ETH0/DHCP&#039;&#039;&#039;&amp;quot; zunächst den &amp;quot;&#039;&#039;&#039;DHCP&#039;&#039;&#039;&amp;quot; deaktivieren:&lt;br /&gt;
&lt;br /&gt;
[[Image:innovaphone DHCP Disable.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Anschließend ist ein Reset notwendig. Diesen kann man unter &amp;quot;&#039;&#039;&#039;Maintenance/Reset&#039;&#039;&#039;&amp;quot; veranlassen.&lt;br /&gt;
&lt;br /&gt;
[[Image:innovaphone Reset Setting.png]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
=== PBX Lizenz &amp;amp; Testmode ===&lt;br /&gt;
&lt;br /&gt;
Bevor Sie neue Telefone zu Ihrer innovaphone hinzufügen können, müssen Sie zunächst Ihre Lizenz aktivieren oder wenn sie es testen wollen ohne die Lizenz, den Testmode aktivieren.&lt;br /&gt;
&lt;br /&gt;
* Um Ihre Lizenz hochzuladen oder den Testmode zu aktivieren gehen sie zu &amp;quot;&#039;&#039;&#039;General/License&#039;&#039;&#039;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Image:innovaphone License Testmode.jpg]]&lt;br /&gt;
&lt;br /&gt;
* Wenn sie eine Lizenz haben klicken sie auf &amp;quot;&#039;&#039;&#039;Datei auswählen&#039;&#039;&#039;&amp;quot; und dann auf &amp;quot;&#039;&#039;&#039;upload&#039;&#039;&#039;&amp;quot;.&lt;br /&gt;
* Wenn Sie den Testmodus aktivieren möchten, drücken Sie &amp;quot;&#039;&#039;&#039;Testmodus&#039;&#039;&#039;&amp;quot;. Im Testmodus akzeptiert die innovaphone PBX Registrierungen für 8 Stunden.&lt;br /&gt;
Danach müssen Sie eine Lizenz hochladen oder den Testmodus erneut aktivieren.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== PBX Teilnehmer ===&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
Gehen sie zu &amp;quot;&#039;&#039;&#039;PBX/Ojects&#039;&#039;&#039;&amp;quot;, wählen &amp;quot;&#039;&#039;&#039;User&#039;&#039;&#039;&amp;quot; und klicken auf &amp;quot;&#039;&#039;&#039;show&#039;&#039;&#039;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Image:innovaphone PBX Objects Show.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Es erscheint die Übersicht aller User (Geräte).&lt;br /&gt;
&lt;br /&gt;
[[Image:innovaphone PBX Objects List.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nun klicken sie auf &amp;quot;&#039;&#039;&#039;new&#039;&#039;&#039;&amp;quot; und es erscheint folgendes Fenster:&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:innovaphone ip811 pbx General new user en sm.jpg]] &lt;br /&gt;
[[Image:Snom_WUI_Identity_Innovaphone_sm_de.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hier gilt es ein paar Dinge zu beachten:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Das Feld Number enthält die Telefonnummer. Diese tragen sie auch genau so im Webinterface (WUI) Ihres Snom Telefons ein unter &amp;quot;&#039;&#039;&#039;Identität 1&#039;&#039;&#039;&amp;quot; im Feld Account.&lt;br /&gt;
* Das Feld Passwort ist das gleiche das sie im Webinterface (WUI) Ihres Snom Telefons benötigen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Konfiguration der SNOM Telefone ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bitte stellen Sie sicher, dass Ihr Telefon korrekt angeschlossen ist.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Zuerst packen Sie Ihr Snom Phone aus und stellen Sie es auf den Tisch.&lt;br /&gt;
* Verwenden Sie dazu das beiliegende Netzwerkkabel und verbinden Sie die Buchse &amp;quot;&#039;&#039;&#039;Net&#039;&#039;&#039;&amp;quot; Ihres Telefons mit Ihrem Netzwerk-Switch.&lt;br /&gt;
* Um Ihr Snom Phone mit Strom zu versorgen, benötigen Sie entweder einen Netzwerk-Switch mit &amp;quot;&#039;&#039;&#039;POE&#039;&#039;&#039;&amp;quot; (Power over Ethernet) oder ein geeignetes Snom-Netzteil.&lt;br /&gt;
 (in der Regel 5V - Keine Garantie für Schäden bei Verwendung eines externen Netzteils).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bitte überprüfen Sie vorab, ob auf Ihrem Telefon die neueste stabile Firmware-Version installiert ist.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Bitte besuchen sie hierfür unser Snom Service Hub: [https://service.snom.com/display/wiki/Firmware+Update+Center Firmware Update Center]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Snom Web-Benutzeroberfläche&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Da die automatische Bereitstellung von der innovaphone PBX nicht unterstützt wird, muss das Snom Telefon über seine Web-Benutzeroberfläche (WUI) eingerichtet werden. &lt;br /&gt;
* Um auf das Telefon zuzugreifen, geben Sie die IP-Adresse Ihres Telefons in Ihren Internet-Browser ein (z.B. http: //192.168.1.100). &lt;br /&gt;
* Um die IP-Adresse Ihres Telefons herauszufinden, drücken Sie die Konfigurationstaste (Zahnradsymbol) -&amp;gt; &amp;quot;&#039;&#039;&#039;Informationen&#039;&#039;&#039;&amp;quot; -&amp;gt; &amp;quot;&#039;&#039;&#039;Systeminformationen&#039;&#039;&#039;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Snom Identität konfigurieren ===&lt;br /&gt;
&lt;br /&gt;
Wählen Sie zunächst den Menüpunkt &amp;quot;&#039;&#039;&#039;Identität 1&#039;&#039;&#039;&amp;quot; auf der linken Seite und geben Sie die Benutzer-ID und das Passwort ein, die Sie in die innovaphone PBX eingegeben haben.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Angezeigter Name&#039;&#039;&#039;: testphone1 &lt;br /&gt;
* &#039;&#039;&#039;Nutzerkennung&#039;&#039;&#039;:  100 (Rufnummer) &lt;br /&gt;
* &#039;&#039;&#039;Passwort&#039;&#039;&#039;: 123 (wie in der innovaphone vergeben)&lt;br /&gt;
* &#039;&#039;&#039;Registrar&#039;&#039;&#039;: 192.168.100.250  (IP der innovaphone)&lt;br /&gt;
&lt;br /&gt;
Klicken sie unten auf &amp;quot;&#039;&#039;&#039;übernehmen&#039;&#039;&#039;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Image:innovaphone ip811 identity Login de.jpg]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ihr Snom Telefon ist nun erfolgreich an der innovaphone PBX registriert&#039;&#039;&#039; und kann Anrufe tätigen und entgegennehmen.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
=== Konfiguration der innovaphone sichern. ===&lt;br /&gt;
&lt;br /&gt;
Sie können die Konfiguration Ihrer innovaphone in einer Config Datei Exportieren.&lt;br /&gt;
Gehen sie dafür zu &amp;quot;&#039;&#039;&#039;Maintenance/Diagnostics/Config-Show&#039;&#039;&#039;&amp;quot;. Dort wird Ihnen eine komplette Liste angezeigt. Markieren sie die ganze Liste von oben nach unten und kopieren den Inhalt in eine Textdatei.&lt;br /&gt;
&lt;br /&gt;
[[Image:innovaphone Config Show.png]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
=== Zurücksetzen der innovaphone PBX ===&lt;br /&gt;
Sollte es aus irgendeinem Grund notwendig erscheinen die innovaphone PBX neuzustarten oder auf Werkseinstellung zurückzusetzten, zeigen wir ihnen hier wie das geht:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Neustart mit Erhalt der Konfigurationsdaten:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Durch einen kurzen &#039;&#039;&#039;Reset&#039;&#039;&#039; wird das Gerät neu gestartet. Der Reset-Knopf darf dabei &#039;&#039;&#039;nicht länger als eine Sekunde&#039;&#039;&#039; gedrückt werden.&lt;br /&gt;
 &lt;br /&gt;
[[Image:innovaphone Reset.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Neustart mit Rücksetzen der Konfiguration auf Werkseinstellungen:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Hierzu wird ein langer Reset durchgeführt, wobei der Reset- Knopf länger als 20 Sekunden gedrückt wird. &lt;br /&gt;
  Dadurch wird der Flash-Speicher des Gerätes gelöscht und dieses auf die Werkseinstellungen zurückgesetzt.&lt;br /&gt;
* Anschließend wechselt es in den TFTP-Modus. Je nach Größe und Nutzung des Flash-Speichers kann dieser Vorgang bis zu 60 Sekunden dauern. &lt;br /&gt;
  Die LED des Geräts flackert solange, bis der Speicher komplett gelöschtwurde.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Bitte führen Sie währenddessen keinen erneuten Reset durch und unterbrechen Sie die Stromversorgung nicht.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Wenn das Flackern erloschen ist und die LED rot leuchtet, dann bitte kurz dasGerät von der Stromversorgung trennen.&lt;br /&gt;
* Das Gerät ist nun im Werkszustand und kann wieder über seine IP-Adresse oder die NetBIOS-Methode erreicht werden.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
=== Wiederherstellen der Konfiguration ===&lt;br /&gt;
&lt;br /&gt;
Wenn Sie über den Browser auf das Admin-UI zugreifen, gehen Sie bitte zu &amp;quot;&#039;&#039;&#039;Maintenance/Upload/Config&#039;&#039;&#039;&amp;quot; und laden Sie die Backup-Konfigurationsdatei hoch.&lt;br /&gt;
&lt;br /&gt;
[[Image:innovaphone Upload Config.png]]&lt;br /&gt;
&lt;br /&gt;
* Evtl. kommt eine Meldung, &amp;quot;&#039;&#039;&#039;Lines skipped&#039;&#039;&#039;&amp;quot;, das können sie ignorieren.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Anschließend führen sie wie verlangt einen Reset der Box aus (Klick auf Reset Button). &lt;br /&gt;
&lt;br /&gt;
[[Image:innovaphone Upload Config Reset sm.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nach dem Neustart hat die innovaphone PBX die wiederhergestellte Konfiguration.&lt;br /&gt;
&lt;br /&gt;
[[Image:innovaphone General Info sm.png]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Configuration (English) ==&lt;br /&gt;
&lt;br /&gt;
===Information about the PBX system===&lt;br /&gt;
The PBX used here is an innovaphone IP811. However, the specifications are transferable to the other innovaphone models.&lt;br /&gt;
&lt;br /&gt;
The SIP protocol is used for voice transmission between the VoIP components.&lt;br /&gt;
&lt;br /&gt;
=== PBX User / Extension ===&lt;br /&gt;
&lt;br /&gt;
[[Image:innovaphone ip811 pbx General new user en sm.jpg]] &lt;br /&gt;
[[Image:Snom WUI Identity innovaphone sm en.jpg]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;There are a few things to consider here:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* The &amp;quot;&#039;&#039;&#039;Number&#039;&#039;&#039;&amp;quot; field contains the telephone number. This same number is used in the &amp;quot;&#039;&#039;&#039;Account Field&#039;&#039;&#039;&amp;quot; in the web interface (WUI) of your snom phone under &amp;quot;&#039;&#039;&#039;Identity 1&#039;&#039;&#039;&amp;quot;.&lt;br /&gt;
* Please provide a strong enough password for the account.&lt;br /&gt;
&lt;br /&gt;
=== Configuration of the Snom phone ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Please make sure your phone is set up correctly.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* First of all, unpack your Snom Phone and put it on the table.&lt;br /&gt;
* To connect it use the enclosednetwork cable and connect the &amp;quot;&#039;&#039;&#039;Net&#039;&#039;&#039;&amp;quot; socket of your telephone to your network switch.&lt;br /&gt;
* To get power for your Snom Phone either a network switch with &amp;quot;&#039;&#039;&#039;POE&#039;&#039;&#039;&amp;quot; (Power over Ethernet) or a suitable Snom power supply unit&lt;br /&gt;
    (usually 5V - No guarantee for damage when using an external power supply).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Please check in advance that your phone has the latest stable firmware version installed.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Have a look on our Snom Wiki: [http://wiki.snom.com/Firmware Snom Firmware Guide]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Enter Snom Webinterface&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 Since auto provisioning is not supported by the innovaphone PBX, the Snom Phone needs to be set up using its web user interface (WUI). &lt;br /&gt;
 To access the phone, type the IP address of your phone into your internet browser (e.g. http: //192.168.1.100).&lt;br /&gt;
 To find out the IP address of your phone press the Configuration key (gear wheel symbol) -&amp;gt; &amp;quot;&#039;&#039;&#039;Information&#039;&#039;&#039;&amp;quot; -&amp;gt; &amp;quot;&#039;&#039;&#039;System information&#039;&#039;&#039;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Register a SIP account ===&lt;br /&gt;
&lt;br /&gt;
First select the &amp;quot; &#039;&#039;&#039;Identity 1&#039;&#039;&#039; &amp;quot; menu item on the left-hand side and enter the user ID and password you entered into the innovaphone PBX.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Displayname:&#039;&#039;&#039; testphone1&lt;br /&gt;
* &#039;&#039;&#039;Account:&#039;&#039;&#039; 100 (telephone number)&lt;br /&gt;
* &#039;&#039;&#039;Password:&#039;&#039;&#039; 123 (as assigned in the innovaphone)&lt;br /&gt;
* &#039;&#039;&#039;Registrar:&#039;&#039;&#039; 192.168.100.250 (IP Adress of the innovaphone) &lt;br /&gt;
&lt;br /&gt;
Click on &amp;quot;&#039;&#039;&#039;apply&#039;&#039;&#039; &amp;quot; below.&lt;br /&gt;
&lt;br /&gt;
[[Image:innovaphone ip811 identity Login en.jpg]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;The phone configuration is now complete.&#039;&#039;&#039; Your Snom phone is now successfully registered on the innovaphone PBX and can make and receive calls.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Contact Details==&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| Company Name: || Snom Technology GmbH&lt;br /&gt;
|-&lt;br /&gt;
| Street: || Wittestraße 30 G&lt;br /&gt;
|-&lt;br /&gt;
| ZIP/City: || 13509 Berlin&lt;br /&gt;
|-&lt;br /&gt;
| Country: || Germany&lt;br /&gt;
|-&lt;br /&gt;
| Phone: || +49 30 39833-0&lt;br /&gt;
|-&lt;br /&gt;
| Fax: || +49 30 39833-111&lt;br /&gt;
|-&lt;br /&gt;
| Mail: || [mailto:officemanagement@snom.com officemanagement@snom.com]&lt;br /&gt;
|-&lt;br /&gt;
| Internet: || [https://www.snom.com Snom Technology GmbH]&lt;br /&gt;
|-&lt;br /&gt;
| Contact: || [https://www.snom.com/de/kontakt/ Snom contact]&lt;br /&gt;
|-&lt;br /&gt;
| Support: || [https://service.snom.com Snom Service Hub]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Nfi</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Reference13r3:Concept_App_Service_Contacts&amp;diff=66487</id>
		<title>Reference13r3:Concept App Service Contacts</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Reference13r3:Concept_App_Service_Contacts&amp;diff=66487"/>
		<updated>2023-03-16T06:49:55Z</updated>

		<summary type="html">&lt;p&gt;Nfi: /* Features */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Concept|Apps]]&lt;br /&gt;
= Applies To =&lt;br /&gt;
* App Contacts version 13r3&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
The App Service Contacts is an App Service which can be installed on an innovaphone App Platform. It is used for information retrieval of a database of contact entries, as well as maintaining personal contact books.&lt;br /&gt;
&lt;br /&gt;
Inside Contacts, personal and general entries can be searched (forward lookup) or be used to resolve incoming numbers to their respective name (reverse lookup).&lt;br /&gt;
&lt;br /&gt;
= Features =&lt;br /&gt;
*Import: Semicolon (;) separated CSV file&lt;br /&gt;
*Database for contact entries: A user interface for retrieval purposes is available. &lt;br /&gt;
*API: Search API for other apps&lt;br /&gt;
*Edit Functionality: Contact entries are editable.&lt;br /&gt;
*Personal Address Book: Every user can maintain one or more personal address books.&lt;br /&gt;
*Access Right Management: Owners can maintain access privileges for single users or even groups of users, in order to control visibility of an address book.&lt;br /&gt;
&lt;br /&gt;
= Requirements =&lt;br /&gt;
innovaphone PBX and App Platform from on version 13r3.&lt;br /&gt;
==Upgrade Considerations==&lt;br /&gt;
As always, don&#039;t forget to backup an existing App Platform in prior. This 13r3 App Contacts does alter the underlying database scheme.&lt;br /&gt;
;13r3 App on 13r1 App Platform, 13r1 PBX:Doesn&#039;t work. This 13r3 Contacts App does not work on an 13r1 Application Platform/Environment.&lt;br /&gt;
;13r3 App on 13r2 App Platform, 13r2 PBX:The 13r3 Contacts App works with the restriction, that the reverse lookup for private address books doesn&#039;t work. For full feature set, also upgrade the App Platform and PBX to 13r3.&lt;br /&gt;
&lt;br /&gt;
=Apps=&lt;br /&gt;
=== Contacts App (innovaphone-contacts) ===&lt;br /&gt;
The regular app&lt;br /&gt;
=== Contacts Admin App (innovaphone-contacts-admin) ===&lt;br /&gt;
Features a menu (top-right) to manually upload a CSV file&lt;br /&gt;
=== Contacts Search API (innovaphone-contacts-searchapi) ===&lt;br /&gt;
This hidden app rovides a search API to other apps, e.g. for the Phone App&lt;br /&gt;
&lt;br /&gt;
= Concept =&lt;br /&gt;
General contact entries and entries for personal directories are stored within the same database. With the table &#039;&#039;&#039;acl&#039;&#039;&#039; which is acting as an access control list, restricted views and edit rights for personal directories can be granted.&lt;br /&gt;
&lt;br /&gt;
This way, only the owner of a personal directory (and granted user or groups) can see the content.&lt;br /&gt;
&lt;br /&gt;
==Number handling==&lt;br /&gt;
In principle, two versions of a phone number are always stored in the contacts database. &lt;br /&gt;
;Original Number&lt;br /&gt;
:This is the unchanged number imported by the user. This version includes all decorative characters, spaces, etc. (eg. +49-(7031) 730090)&lt;br /&gt;
;Formatted number&lt;br /&gt;
:A filter is applied to the original number before saving to remove all non-dialable characters. (This means that only &amp;lt;code&amp;gt;0-9,+,*,#&amp;lt;/code&amp;gt; remain after that) This formatted version of the call number is saved in addition to the data set. (eg. +497031730090)&lt;br /&gt;
&lt;br /&gt;
If a number is searched for (reverse lookup), the cleaned version is searched for. Thus, it does not matter which decorative characters or formats are imported.&lt;br /&gt;
If an entry is displayed to the user, the originally entered call number (incl. decoration characters) is displayed.&lt;br /&gt;
&lt;br /&gt;
It is therefore best practice to import only international format numbers (Decorations can be imported as they will be removed anyway), as the PBX always converts the number into the international format for a reverse lookup, if the [[Reference13r1:Concept_Number_Adjustments_%28Dialing_Location%29 |dialing location]] was configured correct.&lt;br /&gt;
&lt;br /&gt;
==Assign unique IDs for contacts entries==&lt;br /&gt;
It is recommended to upload CSV files with an additional column &#039;&#039;extAnchor&#039;&#039;. The column extAnchor allows to identify individual entries uniquely and independent of renaming operations. The column &#039;&#039;extAnchor&#039;&#039; is supposed to contain an external unique database id, alike a guid. If &#039;&#039;extAnchor&#039;&#039; was provided the import procedure will perform an UPDATE of previously existing entries, instead of deleting and re-INSERTing the entries. Entries pinned on home are going to remain functional.&lt;br /&gt;
&lt;br /&gt;
==List of Attributes==&lt;br /&gt;
The list of currently available attributes for a contacts entry follows:&lt;br /&gt;
;extAnchor&lt;br /&gt;
: unique id identifying the entry within the database&lt;br /&gt;
;givenname&lt;br /&gt;
:First name&lt;br /&gt;
;sn&lt;br /&gt;
:Surname/Family name&lt;br /&gt;
;company&lt;br /&gt;
:Corporation&lt;br /&gt;
;displayname&lt;br /&gt;
:Name to be displayed&lt;br /&gt;
;email&lt;br /&gt;
:e.g. &#039;&#039;example@example.com&#039;&#039;&lt;br /&gt;
;telephonenumber&lt;br /&gt;
:Internationalized land-line telephone number, e.g.&#039;&#039; +49 7031 730090&#039;&#039;&lt;br /&gt;
;mobile&lt;br /&gt;
:Internationalized mobile telephone number&lt;br /&gt;
;homephone&lt;br /&gt;
:Internationalized home phone number&lt;br /&gt;
;facsimiletelephonenumber&lt;br /&gt;
:Internationalized fax number&lt;br /&gt;
;city&lt;br /&gt;
:City/Town, e.g. &#039;&#039;Milano&#039;&#039;&lt;br /&gt;
;street&lt;br /&gt;
;postalcode&lt;br /&gt;
;state&lt;br /&gt;
:Federal state, e.g. some US states: &#039;&#039;Ca, Wa, Fl&#039;&#039; &lt;br /&gt;
;country&lt;br /&gt;
:e.g. &#039;&#039;Deutschland, Italia&#039;&#039;&lt;br /&gt;
;privatecity&lt;br /&gt;
:Home address&lt;br /&gt;
;privatestreet&lt;br /&gt;
;privatepostalcode&lt;br /&gt;
;privatestate&lt;br /&gt;
;privatecountry&lt;br /&gt;
;title&lt;br /&gt;
:Academic title&lt;br /&gt;
;position&lt;br /&gt;
:Position within company, department&lt;br /&gt;
;department&lt;br /&gt;
;description&lt;br /&gt;
:Common description&lt;br /&gt;
;roomnumber&lt;br /&gt;
;info&lt;br /&gt;
:Common info&lt;br /&gt;
;url&lt;br /&gt;
:Company URL&lt;br /&gt;
;sip&lt;br /&gt;
:Dialable SIP address&lt;br /&gt;
&lt;br /&gt;
==List of Text-Indexable Attributes==&lt;br /&gt;
Attributes to be considered for the full-text index&lt;br /&gt;
*cn&lt;br /&gt;
*sn&lt;br /&gt;
*givenname&lt;br /&gt;
*company&lt;br /&gt;
*displayname&lt;br /&gt;
*info&lt;br /&gt;
*city&lt;br /&gt;
*street&lt;br /&gt;
*postalcode&lt;br /&gt;
*country&lt;br /&gt;
*state&lt;br /&gt;
*private_city&lt;br /&gt;
*private_street&lt;br /&gt;
*private_postalcode&lt;br /&gt;
*private_country&lt;br /&gt;
*private_state&lt;br /&gt;
*title&lt;br /&gt;
*position&lt;br /&gt;
*department&lt;br /&gt;
*description&lt;br /&gt;
*roomnumber&lt;br /&gt;
*sip&lt;br /&gt;
&lt;br /&gt;
==Built-in LDAP Server==&lt;br /&gt;
The App incorporates a proprietary LDAP server functionality. The purpose of the LDAP server functionality is to service innovaphone LDAP clients, such as desk phones.&lt;br /&gt;
The LDAP server only supports a proprietary search by means of a meta attribute&amp;lt;ref&amp;gt;Meta attribute: Here an attribute with a special meaning and that is non-physical, not existing within the database&amp;lt;/ref&amp;gt;, whereby LDAP is just utilized as a transport vehicle for a user&#039;s search input one-to-one.&lt;br /&gt;
*E.g. a user searching for &#039;&#039;John Doe innovaphone&#039;&#039;&lt;br /&gt;
**Possible user input &#039;&#039;jo do inno&#039;&#039;&lt;br /&gt;
**Resulting LDAP filter &#039;&#039;(metaSearchText=jo do inno)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important:&#039;&#039;&#039;&amp;lt;br\&amp;gt;&lt;br /&gt;
Note, that access to restricted/personal phone books requires the proprietary scheme within the LDAP client, mentioned above.&amp;lt;br\&amp;gt;&lt;br /&gt;
Currently, this is available in the innovaphone IP phone LDAP clients from 13r3 on, but not on 3rd party devices nor our DECT gateways (IP120x). On these clients, only contact data in unrestricted phone books is searched.&lt;br /&gt;
&lt;br /&gt;
===Sample Phone Configuration, innovaphone===&lt;br /&gt;
Phone/User-X/Directories/External LDAP Server&lt;br /&gt;
;Enable: Active&lt;br /&gt;
;Use TLS: Active&lt;br /&gt;
;Server: &amp;lt;host adddress of App Platform&amp;gt;&lt;br /&gt;
;Port: &amp;lt;can be left empty&amp;gt;&lt;br /&gt;
;Username,Pw: &amp;lt;Credentials for LDAP Bind operation&amp;gt;&lt;br /&gt;
;Search Base: &#039;&#039;dc=entries&#039;&#039;&lt;br /&gt;
;Mode: &amp;lt;can be left on &amp;quot;basic&amp;quot;&amp;gt;&lt;br /&gt;
;Object Filter: &amp;lt;leave empty&amp;gt;&lt;br /&gt;
;Sort Results: Inactive&lt;br /&gt;
;Name Attributes: &#039;&#039;givenName,sn,company&#039;&#039;&lt;br /&gt;
;Number Attributes: &amp;lt;can be left empty&amp;gt;&lt;br /&gt;
;H323 ID Attribute:&#039;&#039; sip&#039;&#039;&lt;br /&gt;
;Detail Attributes: &#039;&#039;title,company,street,postalCode,city,country,email,url&#039;&#039;&lt;br /&gt;
;Meta Name Attribute: &#039;&#039;metaSearchText&#039;&#039;&lt;br /&gt;
;Meta Number Attribute: &#039;&#039;metaSearchNumber&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= Personal Address Book Details =&lt;br /&gt;
With version 13r3 it is now possible, to add, editing and delete contacts. It is also possible to create and maintain personal address book(s), as well as share them with other users or whole user groups.&lt;br /&gt;
&lt;br /&gt;
Only user/groups with sufficient rights, will be able to see other address books. An Access control list (acl) is used, to control these rights. &lt;br /&gt;
&lt;br /&gt;
Groups correspond to PBX-groups. The Contacts App gets to know only active PBX-group memberships.&lt;br /&gt;
&lt;br /&gt;
By default, only the user who created an address book, is able to see the content.&lt;br /&gt;
&lt;br /&gt;
==Maintain a Personal Address Book==&lt;br /&gt;
;Creating a Personal Address Book&lt;br /&gt;
Click on the burger menu in the top right corner inside the Contacts-App, and there on the &#039;&#039;&#039;&amp;quot;Directories&amp;quot;&#039;&#039;&#039;. Now click on the &#039;&#039;&#039;&amp;quot;+&amp;quot;&#039;&#039;&#039;-Symbol, choose a suitable name and confirm your name via &#039;&#039;&#039;&amp;quot;Save&amp;quot;&#039;&#039;&#039; button. A new address book is created.&lt;br /&gt;
;Adding a new contact&lt;br /&gt;
Click on the &#039;&#039;&#039;&amp;quot;+&amp;quot;&#039;&#039;&#039;-Symbol in the top right corner inside the Contacts-App and select an address book, where you want the contact to be stored in. Now fill in the contact information (the fields &#039;&#039;&amp;quot;name&amp;quot;&#039;&#039; and &#039;&#039;&amp;quot;last name&amp;quot;&#039;&#039; &#039;&#039;&#039;have to be filled&#039;&#039;&#039;) and save it via &#039;&#039;&#039;&amp;quot;Save&amp;quot;&#039;&#039;&#039;-button.&lt;br /&gt;
;Editing an existing contact&lt;br /&gt;
Search for the contact you want to edit via the search box inside the Contacts-App. Click on the &#039;&#039;&#039;&amp;quot;Details&amp;quot;&#039;&#039;&#039;-field on the right of the contact entry. Now click on the bottom on the &#039;&#039;&#039;&amp;quot;Edit&amp;quot;&#039;&#039;&#039;-button, click on the entry you want to edit and after your change, save it via &#039;&#039;&#039;&amp;quot;Save&amp;quot;&#039;&#039;&#039;-button on the bottom.&lt;br /&gt;
;Delete an existing contact&lt;br /&gt;
Search for the contact you want to edit via the search box inside the Contacts-App. Click on the &#039;&#039;&#039;&amp;quot;Details&amp;quot;&#039;&#039;&#039;-field on the right of the contact entry. Now click on the bottom on the &#039;&#039;&#039;&amp;quot;Edit&amp;quot;&#039;&#039;&#039;-button, and on the &#039;&#039;&#039;&amp;quot;trashcan&amp;quot;&#039;&#039;&#039;-symbol at the top. After confirmation, the entry is deleted.&lt;br /&gt;
&lt;br /&gt;
==Sharing of Address Book==&lt;br /&gt;
;Share globally&lt;br /&gt;
*Either remove all rules from a personal directory. Such a configuration corresponds to pre-13r3 capabilities. Up to 13r2 there weren&#039;t any visibility rules available.&lt;br /&gt;
*Or make every PBX user an active member of a group e.g. &amp;quot;everybody&amp;quot; and add a directory rule for that group &amp;quot;everybody&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
;Share with single user(s)&lt;br /&gt;
Click on the menu in the top right corner inside the Contacts-App, click on &#039;&#039;&#039;&amp;quot;directories&amp;quot;&#039;&#039;&#039; and select a directory, you want to share.&lt;br /&gt;
&lt;br /&gt;
Now click on the &#039;&#039;&#039;&amp;quot;+&amp;quot;&#039;&#039;&#039;-symbol and select &#039;&#039;&#039;&amp;quot;User&amp;quot;&#039;&#039;&#039; as type. In the input field, you can enter and therefore filter for all available users. Select the user, whom you want to give access and select either if the user should have admin-rights or not. Now click on &#039;&#039;&#039;Ok&#039;&#039;&#039; and submit your change with another click on &#039;&#039;&#039;Ok&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
;Share with a group&lt;br /&gt;
Click on the menu in the top right corner inside the Contacts-App, click on &#039;&#039;&#039;&amp;quot;directories&amp;quot;&#039;&#039;&#039; and select a directory, you want to share.&lt;br /&gt;
&lt;br /&gt;
Now click on the &#039;&#039;&#039;&amp;quot;+&amp;quot;&#039;&#039;&#039;-symbol and select &#039;&#039;&#039;&amp;quot;Group&amp;quot;&#039;&#039;&#039; as type. In the input field, you can enter and therefore filter for all available PBX groups. Also select, if the user should have admin-rights or not. Now click on &#039;&#039;&#039;Ok&#039;&#039;&#039; and submit your change with another click on &#039;&#039;&#039;Ok&#039;&#039;&#039;-button.&lt;br /&gt;
&lt;br /&gt;
;Revoke of granted rights&lt;br /&gt;
You can also revoke previous granted rights by just clicking on the user/group at the access control list, and click on the &#039;&#039;&#039;trashcan&#039;&#039;&#039; symbol. Now submit your change with another click on &#039;&#039;&#039;Ok&#039;&#039;&#039;-button.&lt;br /&gt;
&lt;br /&gt;
==Upload a new Directory==&lt;br /&gt;
The Contacts Admin App allows uploading a CSV file as known from the 13r2 version (&#039;&#039;&#039;Hamburger/Import&#039;&#039;&#039;). In the course of an upload operation, a new directory will be created. The newly assigned directory name will be the name of the CSV file.&lt;br /&gt;
After uploading, the visibility setting of the new directory should be administrated as stated before under [[#Sharing_of_Address_Book|Sharing of Address Book]]&lt;br /&gt;
&lt;br /&gt;
==Terminology==&lt;br /&gt;
;ACL: Access control list. Refers the database table &#039;&#039;acl&#039;&#039; and rows/entries therein.&lt;br /&gt;
;Directory: Refers the database table &#039;&#039;dbs&#039;&#039; and rows/entries therein. All contact entries referencing a &#039;&#039;dbs&#039;&#039;-row make up the content of a directory.&lt;br /&gt;
;Address Book: Synonymous with &#039;&#039;Directory&#039;&#039;&lt;br /&gt;
;Contacts Admin: A user utilizing the Contacts Admin App (via App URL, ending with ../innovaphone-contacts-admin)&lt;br /&gt;
;Directory Admin: A user entitled the admin right for a directory. Either by user-wise or by group-wise ACL entry.&lt;br /&gt;
;Directory User/Viewer: A user entitled the viewing right for a directory. Either by user-wise or by group-wise ACL entry.&lt;br /&gt;
&lt;br /&gt;
==Database Changes==&lt;br /&gt;
Three tables realize the functionality for personal directories.&lt;br /&gt;
*Table &#039;&#039;&#039;dbs&#039;&#039;&#039;. Each row represents a directory. Two new columns &#039;&#039;displayname, sip&#039;&#039; where added.&lt;br /&gt;
**&#039;&#039;&#039;displayname&#039;&#039;&#039; Name display.&lt;br /&gt;
**&#039;&#039;&#039;sip&#039;&#039;&#039; Creator&#039;s sip name, if available.&lt;br /&gt;
*Table &#039;&#039;&#039;acl&#039;&#039;&#039;.New table acting as access control list. Each row references a directory as listed by table &#039;&#039;dbs&#039;&#039; and is going to grant view- and admin-right to a specific user or group. &lt;br /&gt;
**&#039;&#039;&#039;dbsid&#039;&#039;&#039; Reference into table dbs.&lt;br /&gt;
**&#039;&#039;&#039;name&#039;&#039;&#039; The name of a user or a group.&lt;br /&gt;
**&#039;&#039;&#039;acltype&#039;&#039;&#039; A numeric value: user(0), group(1)&lt;br /&gt;
**&#039;&#039;&#039;admin&#039;&#039;&#039; Granting edit right: admin(true), non-admin(false)&lt;br /&gt;
*Table &#039;&#039;&#039;entries&#039;&#039;&#039;. Each row within this pre-exisisting table represents a contact entry. The column &#039;&#039;dbsid&#039;&#039; informs about whether an entry belongs to a specific directory.&amp;lt;code type=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
#Excerpt for an additional directory &#039;&#039;Persönliches Verzeichnis: mst&#039;&#039; with one contact entry.&lt;br /&gt;
&lt;br /&gt;
root@app-platform|/mnt/sda2/home/admin&amp;gt; psql -d &amp;quot;innovaphone.com_contacts&amp;quot; -c &amp;quot;select * from dbs&amp;quot;&lt;br /&gt;
 id |                         uri                          |          displayname           | sip&lt;br /&gt;
----+------------------------------------------------------+--------------------------------+-----&lt;br /&gt;
  7 | file:///4eaae395-9971-40fb-9a05-dfae1d023f12?sip=mst | Persönliches Verzeichnis: mst  | mst      # Specification for directory (&#039;Persönliches Verzeichnis: mst&#039;)&lt;br /&gt;
&lt;br /&gt;
root@app-platform|/mnt/sda2/home/admin&amp;gt; psql -d &amp;quot;innovaphone.com_contacts&amp;quot; -c &amp;quot;select * from acl&amp;quot;&lt;br /&gt;
 id | dbsid | name | acltype | admin&lt;br /&gt;
----+-------+------+---------+-------&lt;br /&gt;
  5 |     7 | mst  |       0 | t              #user &#039;mst&#039; can view and edit directory with dbsid=7 (&#039;Persönliches Verzeichnis: mst&#039;)&lt;br /&gt;
&lt;br /&gt;
root@app-platform|/mnt/sda2/home/admin&amp;gt; psql -d &amp;quot;innovaphone.com_contacts&amp;quot; -c &amp;quot;select sn,givenname,company,id,dbsid from entries where dbsid=7&amp;quot;&lt;br /&gt;
    sn    | givenname |   company    |  id   | dbsid&lt;br /&gt;
----------+-----------+--------------+-------+-------&lt;br /&gt;
 Duck     | Dagobert  | Duck Corp.   | 51394 |     7   # main table entries contains 1 entry belonging to (&#039;Persönliches Verzeichnis: mst&#039;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Reverse Number Lookup for Personal Directories==&lt;br /&gt;
Queries into directories are access-checked by looking-up and enforcing ACL-rules. The information on whose name is being queried and which group memberships are taking effect is needed for this process.&lt;br /&gt;
&lt;br /&gt;
Websocket connections to the Contacts App service carry those infos within the SDK method &#039;&#039;AppWebsocketConnectComplete()&#039;&#039;. &lt;br /&gt;
LDAP connections pass this information within a proprietary LDAP control together with an LDAP searchRequest message. &lt;br /&gt;
&lt;br /&gt;
The PBX&#039;s centralized Reverse Lookup service (see &#039;&#039;PBX/Config/General/Reverse Lookup URL&#039;&#039;) does support this mechanism.  That is, for every LDAP searchRequest the affected user&#039;s name and active group memberships are going to be sent towards the Contacts App&#039;s LDAP server.&lt;br /&gt;
&lt;br /&gt;
See also [[Reference13r1:Concept_Reverse_Lookup|concept article on reverse lookup]].&lt;br /&gt;
&lt;br /&gt;
=Upload Data by HTTP Post=&lt;br /&gt;
A CSV file can be uploaded by means of an HTTP POST request. &lt;br /&gt;
The following powershell script aims to demonstrate this procedure with the help of CURL&amp;lt;ref&amp;gt;For a windows distribution: e.g.: https://curl.haxx.se/download.html &amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;CURL is recommended(rather required), because it supports the simple POST mechanism with an initial tentative POST with the data length of 0, in order to get through the authentication phase&amp;lt;/ref&amp;gt;&lt;br /&gt;
The required user and password content corresponds to the configuration underneath &#039;&#039;&#039;PBX Manager/AP Contacts/Configuration/User(HTTP Post)&#039;&#039;&#039; and &#039;&#039;&#039;Password(HTTP Post)&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;code type=&amp;quot;powershell&amp;quot;&amp;gt;&lt;br /&gt;
# csv.ps1&lt;br /&gt;
# Sample powershell script demonstrating how to HTTP POST a CSV file towards the Contacts App service.&lt;br /&gt;
# .\bin\curl must be present, e.g. from https://curl.haxx.se/download.html&lt;br /&gt;
# Examples:&lt;br /&gt;
# powershell -ExecutionPolicy Bypass -Command .\csv.ps1 -Dest 172.16.18.215 -File &amp;quot;.\myContacts.utf8&amp;quot; -User &amp;quot;contacts01&amp;quot; -Pw &amp;quot;pwd01&amp;quot; -Url &amp;quot;/example.com/contacts01/post/myContacts.utf8?op=csv&amp;quot;&lt;br /&gt;
&lt;br /&gt;
param(&lt;br /&gt;
	[Parameter(Mandatory=$false, HelpMessage=&amp;quot;Destination host&amp;quot;)]&lt;br /&gt;
	[string]$Dest,&lt;br /&gt;
	[Parameter(Mandatory=$false, HelpMessage=&amp;quot;Name of file to be POSTed&amp;quot;)]&lt;br /&gt;
	[string]$File,	&lt;br /&gt;
	[Parameter(Mandatory=$false, HelpMessage=&amp;quot;Authentication: User&amp;quot;)]&lt;br /&gt;
	[string]$User,&lt;br /&gt;
	[Parameter(Mandatory=$false, HelpMessage=&amp;quot;Authentication: Password&amp;quot;)]&lt;br /&gt;
	[string]$Pw,&lt;br /&gt;
	[Parameter(Mandatory=$false, HelpMessage=&amp;quot;URL, e.g.: /example.com/contacts01/post/myContacts.csv?op=csv&amp;amp;xml-stats=true&amp;quot;)]&lt;br /&gt;
	[string]$Url&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
Add-Type -AssemblyName System.Web&lt;br /&gt;
&lt;br /&gt;
$Uri = &amp;quot;http://&amp;quot; + $Dest + $Url&lt;br /&gt;
&lt;br /&gt;
function UploadToContacts {&lt;br /&gt;
	# Ensure file&#039;s there and has content&lt;br /&gt;
	if (!(Test-Path -Path $File)) {&lt;br /&gt;
		echo $File+&amp;quot; not downloaded!&amp;quot;&lt;br /&gt;
		exit 1&lt;br /&gt;
	}&lt;br /&gt;
	$lines = 0&lt;br /&gt;
	Get-Content $File |%{ $lines++ }&lt;br /&gt;
	echo &amp;quot;Lines of $File=$lines&amp;quot;&lt;br /&gt;
	if($lines -le 2) {&lt;br /&gt;
		echo &amp;quot;No Data to upload!&amp;quot;&lt;br /&gt;
		exit 1&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	$auth = &amp;quot;${User}:${Pw}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
	echo &amp;quot;POSTing towards $Uri&amp;quot;&lt;br /&gt;
	.\bin\curl &amp;quot;--digest&amp;quot; -s -S --trace-time -u $auth -i -H &amp;quot;Content-Type:application/octet-stream&amp;quot; -X POST --data-binary &amp;quot;@${File}&amp;quot; &amp;quot;${Uri}&amp;quot;&lt;br /&gt;
	echo &amp;quot;POSTed towards $Dest&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
$timeStart = Get-Date&lt;br /&gt;
echo &amp;quot;===Begin: ${timeStart} ===&amp;quot;&lt;br /&gt;
UploadToContacts&lt;br /&gt;
$timeEnd = Get-Date&lt;br /&gt;
echo &amp;quot;===End: ${timeEnd} ===&amp;quot;&lt;br /&gt;
echo &amp;quot;&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
== The URL ==&lt;br /&gt;
The first part of the URL (&#039;&#039;example.com/contacts01&#039;&#039;) is the &#039;&#039;Webserver path&#039;&#039; configured for the &#039;&#039;Contacts&#039;&#039; instance in the &#039;&#039;App Platform Manager&#039;&#039;. It must be followed by the literal &amp;lt;code&amp;gt;post&amp;lt;/code&amp;gt;. The last part (&#039;&#039;myContacts.csv&#039;&#039;) can be chosen freely. &lt;br /&gt;
&lt;br /&gt;
Note that the last part of the URL used to post the file (&#039;&#039;myContacts.csv&#039;&#039; in the example above) needs to be chose carefully.  &#039;&#039;Contacts&#039;&#039; will remember this name as source for each of the uploaded entries. When the file is posted again (that is, when a new POST using this last URL part is done), &#039;&#039;Contacts&#039;&#039; will first delete all existing entries previously uploaded with this name and then add the new ones.&lt;br /&gt;
&lt;br /&gt;
=Troubleshooting=&lt;br /&gt;
To collect debugging data, activate the &#039;&#039;&#039;&#039;&#039;App&#039;&#039;&#039;&#039;&#039; and App &#039;&#039;&#039;&#039;&#039;WebSocket&#039;&#039;&#039;&#039;&#039; trace options at the contacts instance on the App Platform Manager. Now reproduce the issue and save the logfile.&lt;br /&gt;
&lt;br /&gt;
==Manually Deleting an uploaded File==&lt;br /&gt;
If multiple files or multiple versions of a CSV file were uploaded, it might not be clear how to delete an old data set. Here is an example for how to accomplish a deletion of a particular data set related to an imported CSV file:&lt;br /&gt;
*2 Files were previously imported&lt;br /&gt;
**&#039;&#039;allcontacts.csv&#039;&#039;&lt;br /&gt;
**&#039;&#039;brs%20testimport.csv&#039;&#039;&lt;br /&gt;
*The file &#039;&#039;brs%20testimport.csv&#039;&#039; shall be deleted&lt;br /&gt;
*Hints&lt;br /&gt;
**Within the Contacts database, the table &#039;&#039;dbs&#039;&#039; contains the names of files once imported.&lt;br /&gt;
**The database name, here: &#039;&#039;innovaphone.com_contacts&#039;&#039; can be retrieved from the settings within in the App Manager for the Contacts App.&lt;br /&gt;
Establish an SSH-session by means of e.g. putty&amp;lt;ref&amp;gt;putty: https://putty.org&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;code type=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#Login&lt;br /&gt;
#===================================================================&lt;br /&gt;
login as: admin&lt;br /&gt;
Using keyboard-interactive authentication.&lt;br /&gt;
Password:&lt;br /&gt;
&lt;br /&gt;
#Elevate to super-user rights, Command &#039;su&#039;&lt;br /&gt;
#===================================================================&lt;br /&gt;
admin@app-platform|/mnt/sda2/home/admin&amp;gt; su&lt;br /&gt;
Password:&lt;br /&gt;
&lt;br /&gt;
#Command &#039;psql&#039;. Printing the table &#039;dbs&#039;. Contains 2 file names.&lt;br /&gt;
#===================================================================&lt;br /&gt;
root@app-platform|/mnt/sda2/home/admin&amp;gt; psql -d &amp;quot;innovaphone.com_contacts&amp;quot; -c &amp;quot;select * from dbs&amp;quot;&lt;br /&gt;
 id |         uri&lt;br /&gt;
----+----------------------&lt;br /&gt;
  1 | allcontacts.csv&lt;br /&gt;
  5 | brs%20testimport.csv&lt;br /&gt;
(2 rows)&lt;br /&gt;
&lt;br /&gt;
#Delete the file &amp;quot;brs%20testimport.csv&amp;quot; via its table-ID 5.&lt;br /&gt;
#===================================================================&lt;br /&gt;
root@app-platform|/mnt/sda2/home/admin&amp;gt; psql -d &amp;quot;innovaphone.com_contacts&amp;quot; -c &amp;quot;delete from dbs where id=5&amp;quot;&lt;br /&gt;
DELETE 1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#Printing the table &#039;dbs&#039;. Contains 1 file name.&lt;br /&gt;
#===================================================================&lt;br /&gt;
root@app-platform|/mnt/sda2/home/admin&amp;gt; psql -d &amp;quot;innovaphone.com_contacts&amp;quot; -c &amp;quot;select * from dbs&amp;quot;&lt;br /&gt;
 id |       uri&lt;br /&gt;
----+-----------------&lt;br /&gt;
  1 | allcontacts.csv&lt;br /&gt;
(1 row)&lt;br /&gt;
&lt;br /&gt;
root@app-platform|/mnt/sda2/home/admin&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Manually Deleting all Contacts==&lt;br /&gt;
Sometimes it may become necessary to delete all contacts from the database. This task can be accomplished by simply deleting the main table &#039;&#039;entries&#039;&#039;. The deletion will cascade from there into all sub-tables.&lt;br /&gt;
*The database name, here: &#039;&#039;innovaphone.com_contacts&#039;&#039; can be retrieved from the settings within in the App Manager for the Contacts App.&lt;br /&gt;
Establish an SSH-session by means of e.g. putty&amp;lt;ref&amp;gt;putty: https://putty.org&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;code type=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#Login&lt;br /&gt;
#===================================================================&lt;br /&gt;
login as: admin&lt;br /&gt;
Using keyboard-interactive authentication.&lt;br /&gt;
Password:&lt;br /&gt;
&lt;br /&gt;
#Elevate to super-user rights, Command &#039;su&#039;&lt;br /&gt;
#===================================================================&lt;br /&gt;
admin@app-platform|/mnt/sda2/home/admin&amp;gt; su&lt;br /&gt;
Password:&lt;br /&gt;
&lt;br /&gt;
#List number of contacts in main table entries&lt;br /&gt;
#===================================================================&lt;br /&gt;
root@app-platform|/mnt/sda2/home/admin&amp;gt; psql -d &amp;quot;innovaphone.com_contacts&amp;quot; -c &amp;quot;select count(*) from entries&amp;quot;&lt;br /&gt;
 count&lt;br /&gt;
-------&lt;br /&gt;
    94&lt;br /&gt;
(1 row)&lt;br /&gt;
&lt;br /&gt;
#Delete&lt;br /&gt;
#===================================================================&lt;br /&gt;
root@app-platform|/mnt/sda2/home/admin&amp;gt; psql -d &amp;quot;innovaphone.com_contacts&amp;quot; -c &amp;quot;delete from entries *&amp;quot;&lt;br /&gt;
DELETE 94&lt;br /&gt;
&lt;br /&gt;
#List number of contacts in main table entries&lt;br /&gt;
#===================================================================&lt;br /&gt;
root@app-platform|/mnt/sda2/home/admin&amp;gt; psql -d &amp;quot;innovaphone.com_contacts&amp;quot; -c &amp;quot;select count(*) from entries&amp;quot;&lt;br /&gt;
 count&lt;br /&gt;
-------&lt;br /&gt;
     0&lt;br /&gt;
(1 row)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Manually Exporting all Contacts==&lt;br /&gt;
Sometimes it may become necessary to export all contacts from the database. &lt;br /&gt;
This task can be accomplished by reading the main table &#039;&#039;entries&#039;&#039;, separate attributes by ; and store the result in a given csv-file.&lt;br /&gt;
The csv-file has to be located in a separate folder with appropriate access rights.&lt;br /&gt;
*The database name, here: &#039;&#039;innovaphone.com_contacts&#039;&#039; can be retrieved from the settings within in the App Manager for the Contacts App.&lt;br /&gt;
Establish an SSH-session by means of e.g. putty&amp;lt;ref&amp;gt;putty: https://putty.org&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;code type=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#Login&lt;br /&gt;
#===================================================================&lt;br /&gt;
login as: admin&lt;br /&gt;
Using keyboard-interactive authentication.&lt;br /&gt;
Password:&lt;br /&gt;
&lt;br /&gt;
#Elevate to super-user rights, Command &#039;su&#039;&lt;br /&gt;
#===================================================================&lt;br /&gt;
admin@app-platform|/mnt/sda2/home/admin&amp;gt; su&lt;br /&gt;
Password:&lt;br /&gt;
&lt;br /&gt;
#create new folder export and grant access rights &lt;br /&gt;
root@app-platform|/mnt/sda2/home/admin&amp;gt; mkdir export&lt;br /&gt;
root@app-platform|/mnt/sda2/home/admin&amp;gt; chmod 777 export&lt;br /&gt;
&lt;br /&gt;
#Retrieve all database entries, separate them by ; and store in file&lt;br /&gt;
#===================================================================&lt;br /&gt;
root@app-platform|/mnt/sda2/home/admin&amp;gt; psql -d &amp;quot;innovaphone.com_contacts&amp;quot; -c &amp;quot;copy entries to &#039;/mnt/sda2/home/admin/export/contacts.csv&#039; delimiter &#039;;&#039; CSV HEADER&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The generated csv-file can be downloaded by use of an sftp-client (e.g. WinSCP) and login to the AP with admin credentials.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- =Known Problems=== --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Known Issues =&lt;br /&gt;
* [[Support:Contacts_on_HomeScreen_can%27t_be_open_after_modification_on_ContactsAPP | Contacts on HomeScreen can&#039;t be open after modification on ContactsAPP]]&lt;br /&gt;
* [[Support:Contacts_Upload_Fails_From_Within_myApps_Launcher | Contacts Upload Fails From Within myApps Launcher]]&lt;br /&gt;
* [[Support:Forward_search_shows_no_result | Forward Search shows &amp;quot;no result&amp;quot;]]&lt;br /&gt;
== DECT Phones Cannot Access Personal Directories ==&lt;br /&gt;
DECT gateways do not support the mechanism required to query into directories with restricted access rules. Hence, DECT mobile phones cannot search into such directories.&lt;br /&gt;
&lt;br /&gt;
== No automatic ACL update on name changes ==&lt;br /&gt;
If a users h323 name is changed, all ACL entries in address books, to which the user has rights, also need to be changed manually, since there is no automatic update between the PBX and the address books.&lt;br /&gt;
&lt;br /&gt;
= Related =&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Nfi</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Howto13r3:Firmware_Upgrade_V13r2_V13r3&amp;diff=66032</id>
		<title>Howto13r3:Firmware Upgrade V13r2 V13r3</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Howto13r3:Firmware_Upgrade_V13r2_V13r3&amp;diff=66032"/>
		<updated>2023-01-27T06:35:54Z</updated>

		<summary type="html">&lt;p&gt;Nfi: /* Shared AP/Several PBX&amp;#039;es */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{FIXME|reason=This article is still work in progress}}&lt;br /&gt;
== Applies To ==&lt;br /&gt;
This information applies to:&lt;br /&gt;
&lt;br /&gt;
* All 13r3 capable innovaphone devices&lt;br /&gt;
: For a general overview of the upgrade process and a list of supported devices with 13r3, see [[Howto:Firmware Upgrade]]&lt;br /&gt;
&lt;br /&gt;
== Migration Policy ==&lt;br /&gt;
Here is how you upgrade a system to 13r3 from 13r2.  For hints on upgrading a system to 13r2 see [[Howto:V13_Firmware_Upgrade_V13r1_V13r2]].&lt;br /&gt;
&lt;br /&gt;
=== Single AP/Single PBX===&lt;br /&gt;
* Create a new update job in devices and select 13r3 as major version&lt;br /&gt;
&lt;br /&gt;
===Shared AP/Several PBX&#039;es===&lt;br /&gt;
We generally recommend to upgrade the entire system (endpoints, PBXs, AP) in &#039;&#039;one shot&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
If this is not possible for any reason, the recommended sequence is:&lt;br /&gt;
# update the master PBX&lt;br /&gt;
# update the slave PBX and all its endpoints location by location&lt;br /&gt;
# update the App Platform to the latest build&lt;br /&gt;
# update all Apps&lt;br /&gt;
# perform the configuration changes described below&lt;br /&gt;
&lt;br /&gt;
Note that during the update time frame, some App data such as Reporting and Recording may be incomplete.&lt;br /&gt;
&lt;br /&gt;
We recommend to review all the configuration changes described below before you begin the update.&lt;br /&gt;
&lt;br /&gt;
== Configuration Changes ==&lt;br /&gt;
In 13r3 we have introduced some new features which are automatically configured if you use the installer to setup your new 13r3 from scratch. If you upgrade an existing installation, you have to configure the following settings manually.&lt;br /&gt;
&lt;br /&gt;
=== Default SRTP key exchange value in device configuration of Phones/Interfaces ===&lt;br /&gt;
Before v13r3, the default value for SRTP key exchange was SDES-DTLS - with v13r3 it changes to the more secure DTLS-SDES. Therefore innovaphone devices now use DTLS instead - if the called endpoint has this preference. To make sure the more secure key exchange is used, we recommend adjusting the &#039;&#039;SRTP key exchange setting&#039;&#039; in the Devices App, &#039;&#039;Device Configuration&#039;&#039; for &#039;&#039;[Phone]&#039;&#039; and &#039;&#039;[Analog phone/fax]&#039;&#039;. An exception to this recommendation is if you are using old phone models (IP110A, IP240A) or gateway models (IP24, IP22) in your setup - as these may have CPU performance issues in the connection setup phase. In that case, use &#039;&#039;&#039;SDES-DTLS&#039;&#039;&#039; as value for the &#039;&#039;SRTP key exchange&#039;&#039; for all devices, not only for the old phone models.&lt;br /&gt;
&lt;br /&gt;
===Group Fax===&lt;br /&gt;
The fax object has to be configured as external resource of a group fax object in 13r3. It is therefore &#039;&#039;&#039;mandatory&#039;&#039;&#039; to assign the fax object as an external resource to all group fax objects after the upgrade.&lt;br /&gt;
&lt;br /&gt;
Also, with 13r3, group faxes can have their own international fax number and company name, so you should fill in these fields, or else the fax header will be empty.&lt;br /&gt;
&lt;br /&gt;
===Contacts App | User drop-down menu for sharing address books===&lt;br /&gt;
With 13r3, personal address books can be created and shared with users/groups. To have a search and drop-down menu in the sharing step, you have to activate the &amp;quot;Admin&amp;quot; option at the &amp;quot;ContactsApi&amp;quot; app object (tab &amp;quot;App&amp;quot;) over the Advanced UI. Otherwise, no results will be shown, and you have to enter the correct h323 name of a user.&lt;br /&gt;
&lt;br /&gt;
===Improved Conference Rooms===&lt;br /&gt;
* The &#039;&#039;Web Access allowed&#039;&#039; checkbox in the conference app has to be set in order to access the Conference Web Access UI.&lt;br /&gt;
: To be able create HTTP links for external participants, the conferencing App is required.&lt;br /&gt;
* Update the [[Reference13r3:PBX/Objects/Conference/Announcement_types#Sample_Announcement_Files | announcements]] for your conference rooms, to include also the &#039;&#039;Web Access announcements&#039;&#039;. &lt;br /&gt;
* it is recommended to use a second Turn-Server listening on TCP port 443 as a fallback option for external conference participants, with local firewalls not allowing access to your standard Turn-server. Configure this second Turn-Server in [[Reference13r3:IP4/General/STUN#TURN_Extern | IP4/General/STUN -&amp;gt; Turn Extern]] [[User:Sga|Sga]] TBD: info zu inno Turn Fallback server&lt;br /&gt;
* 13r3 adds a search-API for the Conference Rooms, allowing users to search for Conference room names from their Phone, Softphone or RCC App. Each conference object provides its own search API which is named like &#039;&#039;&amp;lt;Name-of-conference-object&amp;gt;.search&#039;&#039; and access to it can be granted using the App-Section of a PBX-object. The PBX-Manager Plugin for Conferences offers also an option to add the rights for all conference rooms and their search-APIs to the Config-User and/or Config-Admin template.&lt;br /&gt;
&lt;br /&gt;
=== NTLM/OAuth===&lt;br /&gt;
13r3 introduces OAuth2 Windows Authentication for myApps. If your are currently using NTLM/Netlogon for authentication, you might want to consider upgrading it OAuth2, since this authentication mechanisms is more secure. See [[Reference13r3:Concept OAuth2 Windows Authentication]] for details. &lt;br /&gt;
In 13r3 only Microsoft AD FS is supported as OpenID Server.&lt;br /&gt;
&lt;br /&gt;
===HTTP-Proxy===&lt;br /&gt;
13r3 introduces [[Reference13r3:Concept_myApps_platform_services#HTTP_proxy_support | HTTP-Proxy]] support for myApps. Now, myApps follows by default the OS-settings regarding HTTP-Proxy. This might affect existing setups when updating from 13r2 to 13r3. We recommend to check before a 13r3 update if an HTTP-Proxy is used and if so, test before the update for interop problems between myApps and the used HTTP-Proxy.&lt;br /&gt;
&lt;br /&gt;
===Physical Location===&lt;br /&gt;
The Softphone App supports in 13r3 the determination of the Physical Location. Similar to an IP-Phone, this is determined automatically based on HTTP-Redirects of the myApps PBX-login process. If you use PBX-objects with activated &amp;quot;Local&amp;quot; option (often this is a Trunk Line object), the determined physical location might lead to a different behavior when calling these objects. If this leads to unwanted call flows, you can either adjust the initial myApps registration PBX or configure the Physical location manually at the Softphone.&lt;br /&gt;
&lt;br /&gt;
== Application Platform and its applications ==&lt;br /&gt;
===App Platform image===&lt;br /&gt;
&lt;br /&gt;
It is not mandatory but recommended to [[Reference13r3:Concept_App_Platform#Update_of_the_App_Platform_itself | update the App Platform image]] to the latest version to receive a newer kernel and updated Linux packages.&lt;br /&gt;
&lt;br /&gt;
===Recordings App===&lt;br /&gt;
Please follow the procedure described in the [[Reference13r3:Concept_App_Service_Recordings#Upgrade_from_V13r2_to_V13r3_Recordings_App | Recordings App concept article]].&lt;br /&gt;
&lt;br /&gt;
===Reports App===&lt;br /&gt;
The Reports App will improve missed calls queries by adding a new database index during the first start after an update. Depending on the size of the reporting database, this database adjustment can take some minutes and results also in high CPU-load and missed CDRs during that time.&lt;br /&gt;
&lt;br /&gt;
=== App Service Queues, Switchboard App ===&lt;br /&gt;
To allow monitoring of all queues by all switchboard users, configure a group (e.g. with the name &#039;&#039;queues&#039;&#039;) in the PBX and assign it as &#039;&#039;&#039;Static&#039;&#039;&#039; to all Waiting Queues used by the Switchboard App and assign it also as &#039;&#039;&#039;Static&#039;&#039;&#039; and &#039;&#039;&#039;Active&#039;&#039;&#039; to all Switchboard Users.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Apps new in 13r3===&lt;br /&gt;
New Apps will not be installed automatically by the 13r2 to 13r3 upgrade. The installation description of new 13r3 apps is usually in the concept article. New apps are:&lt;br /&gt;
* [[Reference13r3:Concept_App_Service_Connector_for_kuando®#Configuration | Connector for kuando®]]&lt;br /&gt;
* [[Reference13r3:Concept_App_Service_Connector_for_Microsoft_365 | innovaphone myApps Connector for Microsoft 365]]&lt;br /&gt;
&lt;br /&gt;
== Changes visible to end customers ==&lt;br /&gt;
Listed here are changes that should be communicated by resellers to end users prior to a 13r3 upgrade, as the change will be visible/audible in the behaviour of the application/device.&lt;br /&gt;
===Rework of Phone &amp;amp; Softphone UI===&lt;br /&gt;
Several feature and UI improvements, see &#039;Features&#039; in [[Reference13r3:Concept_App_SoftphoneApp#Features | Reference13r3:Concept App SoftphoneApp ]] and [[Reference13r3:Concept Multi-Video-Conference]].&lt;br /&gt;
&lt;br /&gt;
===CallForwarding in Profile App===&lt;br /&gt;
Added configuration option on call diversions: call forwardings depending on &#039;&#039;myApps online&#039;&#039; and &#039;&#039;Presence&#039;&#039; state. This can be switched on or off by the user in the Profile App.&lt;br /&gt;
&lt;br /&gt;
===Focus App===&lt;br /&gt;
The &amp;quot;App focus&amp;quot; can be used to define a default app for the user. It is started and shown automatically when myApps is loaded. When closing other apps, the app is shown instead of the home screen. Users can activate (default) or deactivate the Focus function in their myApps Client settings (hamburger menu). See &#039;Features&#039; in [[Reference13r3:Concept_myApps#Features | Reference13r3:Concept myApps]]&lt;br /&gt;
&lt;br /&gt;
===Pin Apps===&lt;br /&gt;
Apps can be pinned to the main window. Pinned apps are always running and can&#039;t be closed. They are also started automatically when the myApps client is loaded. This setting is locally stored per-client. So you can pin different apps on your computer and your smartphone.  See &#039;Features&#039; in [[Reference13r3:Concept_myApps#Features | Reference13r3:Concept myApps]]&lt;br /&gt;
&lt;br /&gt;
=== Fax App ===&lt;br /&gt;
The [[Reference13r3:Concept_App_Service_Fax#Mail_Configuration | Mail Configuration]] section of the Fax App offers in 13r3 additional options:&lt;br /&gt;
* Transmission confirmations&lt;br /&gt;
* Transmission reports for outgoing fax jobs as PDF&lt;br /&gt;
* Error notifications for outgoing fax jobs&lt;br /&gt;
&lt;br /&gt;
==Hardware Restrictions==&lt;br /&gt;
For a list of devices with no/restricted support in 13r3, see the [[Howto:Firmware_Upgrade#Version_13r3 | Firmware Upgrade article]].&lt;br /&gt;
&lt;br /&gt;
==Known Problems==&lt;br /&gt;
&lt;br /&gt;
===Boolean App===&lt;br /&gt;
Following the update to 13r3, it is not possible to edit Boolean Apps using the myApps client (except when using the myApps client in a web browser). To resolve this issue, you will need to delete the approxy folder for all users who use the boolean app. You can locate this folder in the following directory: %USERPROFILE%\AppData\Local\innovaphone\myApps.&lt;br /&gt;
Reload or restart myApps afterwards.&lt;br /&gt;
&lt;br /&gt;
===Current major issues that will be fixed with upcoming 13r3SR1 release===&lt;br /&gt;
* [[Support:PBX_13r3_final_trap_with_Unknown_Registrations | PBX 13r3 Final trap with Unknown Registrations]]&lt;br /&gt;
* [[Support:13r3final_App_Platform_-_SMTP_delivery_may_fail_due_to_IPv6_DNS_results | 13r3final App Platform - SMTP delivery may fail due to IPv6 DNS results]]&lt;br /&gt;
* [[Support:13r3final PBX randomly does not execute CFU | 13r3final PBX randomly does not execute CFU]]&lt;br /&gt;
&lt;br /&gt;
More info on other 13r3 SR1 changes can be found in the [[Reference13r3:Release_Notes_Firmware#13r3_Service_Release_1 | Release Notes]].&lt;br /&gt;
&lt;br /&gt;
== Resources Considerations ==&lt;br /&gt;
New firmware always has more features which in turn requires more resources. Growing firmware will thus consume both more flash and RAM for sure. A given system configuration will run flawlessly after a firmware largely only if there is still enough memory left after boot.&lt;br /&gt;
&lt;br /&gt;
Standard configurations which are according [[Howto:How_to_implement_large_PBXs#Technical_data_and_recommended_number_of_users_supported | the specs ]] will run on all supported hardware.  However, unusual configurations may not.  It is a good idea to examine both flash and RAM memory left on high load situations in your existing configuration to see if there is enough resources left for an upgrade.  Please find details in [[Reference:Device Health Check]].&lt;br /&gt;
&lt;br /&gt;
=== RAM ===&lt;br /&gt;
As a rough rule of thumb, a 13r3 release will consume the same amount of RAM compared to a v13r2 firmware.&lt;br /&gt;
&lt;br /&gt;
=== Flash Memory ===&lt;br /&gt;
As a rough rule of thumb, a v13r3 release will consume ~ 0.5 MB flash more compared to a v13r2 firmware.&lt;br /&gt;
&lt;br /&gt;
New firmware comes with new code for new features which consumes more flash memory for the firmware image. For this reason, devices may run out of flash memory during upgrade to v13r3.  Here is the recommended procedure for upgrade on such devices:&lt;br /&gt;
&lt;br /&gt;
* save entire configuration&lt;br /&gt;
* reset to factory defaults&lt;br /&gt;
* load saved configuration (this will reorganize the flash memory usage)&lt;br /&gt;
* upgrade to new firmware&lt;br /&gt;
&lt;br /&gt;
When there is still not enough flash memory available to store the new firmware (Web GUI ends up in a &#039;&#039;Firmwareupdate failed:no space&#039;&#039; / Update client end in a &#039;&#039;Error 0x00130001 Major FLASHMAN0 no space&#039;&#039; event) please open a support case with your current configuration file.&lt;br /&gt;
&lt;br /&gt;
=== Conferences ===&lt;br /&gt;
Since Conferences now use [[Reference13r3:Concept_Multi-Video-Conference | multiple video streams]] to display each conference participant (in 13r1 &amp;amp; 13r2 only the video stream of the speaker was shown), the number of concurrent video streams used in a single conference increased. Please review this [[Reference13r3:Concept_Multi-Video-Conference#Bandwidth_Consideration | bandwidth considerations]]. As a result, a device hosting a multivideo conference on its CONF or SCNF interface has a higher CPU load in 13r3 than in 13r2.&lt;br /&gt;
&lt;br /&gt;
[[Image:13r3_conference_bandwidth.png|700px|Estimated Conference bandwidth requirements]]&lt;br /&gt;
&lt;br /&gt;
The graph shows the bandwidth needed for a device running the CONF interface to participate in a conference. The values shown are for when all participants are in gallery mode (which is the worst case scenario) and in fullscreen presentation mode (which is the best case scenario). In general, the actual bandwidth needed will fall somewhere between these two extremes. To calculate the CPU requirements for the device, you can use the following formula: CPU% = Bandwidth (in Mbps) / x, where x is 0.42 for a xx10 device, 0.56 for a xx11 device, and 3.6 for a xx13 device. For example, if you are hosting a conference with 10 participants on a xx11 device in gallery mode, the upstream and downstream bandwidth would be 25 Mbps. Using the formula, you can calculate the CPU requirements as follows: CPU% = 25 Mbps / 0.56 = 44.64%. This means that the device should have at least 45% free CPU capacity to handle the conference.&lt;br /&gt;
&lt;br /&gt;
From the client&#039;s perspective, the worst case values for upstream bandwidth (when presenting) would be 1 Mbps, and for downstream bandwidth (when in a gallery mode conference with 20 participants) would be 5 Mbps.&lt;br /&gt;
&lt;br /&gt;
== Related Articles ==&lt;br /&gt;
*[[Howto:Firmware_Upgrade]]&lt;br /&gt;
*[[Support:PBX_V13r3_Final_trap_with_Unkown_Registrations]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Howto|{{PAGENAME}}]]&lt;/div&gt;</summary>
		<author><name>Nfi</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Howto13r3:Step-by-Step_Media_Relay_connection_for_third_party_phone&amp;diff=64658</id>
		<title>Howto13r3:Step-by-Step Media Relay connection for third party phone</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Howto13r3:Step-by-Step_Media_Relay_connection_for_third_party_phone&amp;diff=64658"/>
		<updated>2022-12-22T15:09:46Z</updated>

		<summary type="html">&lt;p&gt;Nfi: /* RTP Range Configuration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- Keywords: SIP, third, party, phone, media relay, step-by-step, easy--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Step-by-Step]]&lt;br /&gt;
&lt;br /&gt;
{{HOWTOMOD13r3 Translation Info}}&lt;br /&gt;
&lt;br /&gt;
This article defines the recommended configuration to connect third party phones. The configuration ensures media connectivity and compatibility to WebRTC  without relying on ICE and DTLS on the phone.&lt;br /&gt;
&lt;br /&gt;
[[Image:Media-relay-endpoints-overview.png]]&lt;br /&gt;
&lt;br /&gt;
== Purpose ==&lt;br /&gt;
A common problem is that third-party SIP phones do not support ICE or DTLS. As a result audio connections across NAT boundaries are often a challenge. To solve this problem, you can enable Media Relay, but the Media Relay endpoint address must be a public IP address so that the external SIP phone can send its audio to this address.&lt;br /&gt;
&lt;br /&gt;
Furthermore, WebRTC endpoints require ICE and DTLS to establish an audio connection. Since not all SIP phones support these features, enabling Media Relay for these 3rd party phones solves this issue. &lt;br /&gt;
&lt;br /&gt;
=== Features ===&lt;br /&gt;
*Send Audio traffic across NAT boundaries without using the ICE mechanism.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
*The firmware has to be at least 13r3&lt;br /&gt;
*innovaphone PBX&lt;br /&gt;
*3rd party SIP phone&lt;br /&gt;
*A reverse proxy for forwarding SIP messages (optional - only necessary if you connect an external 3rd party phone)&lt;br /&gt;
*TURN Server is not part of this article (optional - you can route RTP traffic to the PBX directly  if you have no TURN server)&lt;br /&gt;
&lt;br /&gt;
== Things to know before you begin ==&lt;br /&gt;
*The public IP address of the network (External IP of the Firewall or NAT Router)&lt;br /&gt;
*You must have access to the firewall or NAT router to be able to configure port forwardings&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
In this scenario, we are going to configure the above picture to allow an external third party SIP device to send its audio to an internal destination. This Wiki article does not explain how to register a SIP phone to an innovaphone PBX via a reverse proxy. If you need help to accomplish this, please read the instructions in our [[Course13:IT_Advanced_2_-_07_Public_access_to_PBX_resources_%28practice%29|Advanced Training Part 2]] materials. &lt;br /&gt;
&lt;br /&gt;
Please register your SIP device to your PBX via the reverse proxy.&lt;br /&gt;
&lt;br /&gt;
=== Configuration on the User Object ===&lt;br /&gt;
Please set the option &#039;&#039;Media Relay&#039;&#039; on the hardware ID of the user object on which your SIP device is registered. Do not set the Media Relay option globally in the PBX (PBX/Config/General)! This option is no longer required as you can enable Media Relay for each hardware ID individually.&lt;br /&gt;
&lt;br /&gt;
[[Image:Media-relay-endpoints-1.png]]&lt;br /&gt;
&lt;br /&gt;
=== Configuration of the PBX ===&lt;br /&gt;
Under PBX/Config/General of your Advanced UI you will find a configuration option called &#039;&#039;Media Relay Endpoints&#039;&#039;. You have to enter the public IP address of your firewall or NAT router here. The PBX sends this IP address as the &amp;quot;connection address&amp;quot; in the SDP for all devices that are registered via the reverse proxy and use Media Relay. (see first step)&lt;br /&gt;
&lt;br /&gt;
This is not part of this Step by Step article: If you already have a TURN server in use, you can enable the TURN setting and have not configured a &#039;&#039;&#039;Firewall public IP&#039;&#039;&#039; in your PBX. You need to configure the &#039;&#039;&#039;TURN Public Address&#039;&#039;&#039; in your TURN server settings.  In this case, you would route the RTP traffic to the TURN server first.&lt;br /&gt;
&lt;br /&gt;
[[Image:Media-relay-endpoints-2.png]]&lt;br /&gt;
&lt;br /&gt;
===RTP Range Configuration===&lt;br /&gt;
You need to create an RTP port range on the PBX (or the TURN server, depending on whether the TURN flag is active). Please go to IP4/General/Settings on your device PBX (or TURN Server) and configure the &#039;&#039;First UDP-RTP Port&#039;&#039; and then the &#039;&#039;Number of Ports&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[Image:Media-relay-endpoints-3.png]]&lt;br /&gt;
&lt;br /&gt;
===Firewall Configuration===&lt;br /&gt;
You need to create port forwardings on your firewall. Depending on whether the &#039;&#039;TURN&#039;&#039; flag is on or off, a port forwarding for the RTP/UDP ports must be configured towards the PBX (if no &#039;&#039;TURN&#039;&#039; flag is set) or the TURN server (if &#039;&#039;TURN&#039;&#039; flag is set). E.g If you configured a RTP port Range 16384 to 16583, a port forwarding for those exact ports have to be configured on your firewall. &lt;br /&gt;
&lt;br /&gt;
== Verification ==&lt;br /&gt;
&lt;br /&gt;
Please call any extension number in your PBX. You should be able to hear and talk to the other party on the call.&lt;br /&gt;
&lt;br /&gt;
== Known issues ==&lt;br /&gt;
Calling a Voicemail has no audio, while calling a conference there is no audio after the PIN is dialed.&lt;br /&gt;
&lt;br /&gt;
== Related Articles ==&lt;br /&gt;
*[[Reference13r3:Concept Third Party Phones]]&lt;/div&gt;</summary>
		<author><name>Nfi</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Howto13r3:Step-by-Step_Media_Relay_connection_for_third_party_phone&amp;diff=64625</id>
		<title>Howto13r3:Step-by-Step Media Relay connection for third party phone</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Howto13r3:Step-by-Step_Media_Relay_connection_for_third_party_phone&amp;diff=64625"/>
		<updated>2022-12-20T17:05:17Z</updated>

		<summary type="html">&lt;p&gt;Nfi: /* Configuration of the PBX */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- Keywords: SIP, third, party, phone, media relay, step-by-step, easy--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Step-by-Step]]&lt;br /&gt;
&lt;br /&gt;
{{HOWTOMOD13r3 Translation Info}}&lt;br /&gt;
&lt;br /&gt;
This article defines the recommended configuration to connect third party phones. The configuration ensures media connectivity and compatibility to WebRTC  without relying on ICE and DTLS on the phone.&lt;br /&gt;
&lt;br /&gt;
[[Image:Media-relay-endpoints-overview.png]]&lt;br /&gt;
&lt;br /&gt;
== Purpose ==&lt;br /&gt;
A common problem is that third-party SIP phones do not support ICE or DTLS. As a result audio connections across NAT boundaries are often a challenge. To solve this problem, you can enable Media Relay, but the Media Relay endpoint address must be a public IP address so that the external SIP phone can send its audio to this address.&lt;br /&gt;
&lt;br /&gt;
Furthermore, WebRTC endpoints require ICE and DTLS to establish an audio connection. Since not all SIP phones support these features, enabling Media Relay for these 3rd party phones solves this issue. &lt;br /&gt;
&lt;br /&gt;
=== Features ===&lt;br /&gt;
*Send Audio traffic across NAT boundaries without using the ICE mechanism.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
*The firmware has to be at least 13r3&lt;br /&gt;
*innovaphone PBX&lt;br /&gt;
*3rd party SIP phone&lt;br /&gt;
*A reverse proxy for forwarding SIP messages (optional - only necessary if you connect an external 3rd party phone)&lt;br /&gt;
*TURN Server is not part of this article (optional - you can route RTP traffic to the PBX directly  if you have no TURN server)&lt;br /&gt;
&lt;br /&gt;
== Things to know before you begin ==&lt;br /&gt;
*The public IP address of the network (External IP of the Firewall or NAT Router)&lt;br /&gt;
*You must have access to the firewall or NAT router to be able to configure port forwardings&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
In this scenario, we are going to configure the above picture to allow an external third party SIP device to send its audio to an internal destination. This Wiki article does not explain how to register a SIP phone to an innovaphone PBX via a reverse proxy. If you need help to accomplish this, please read the instructions in our [[Course13:IT_Advanced_2_-_07_Public_access_to_PBX_resources_%28practice%29|Advanced Training Part 2]] materials. &lt;br /&gt;
&lt;br /&gt;
Please register your SIP device to your PBX via the reverse proxy.&lt;br /&gt;
&lt;br /&gt;
=== Configuration on the User Object ===&lt;br /&gt;
Please set the option &#039;&#039;Media Relay&#039;&#039; on the hardware ID of the user object on which your SIP device is registered. Do not set the Media Relay option globally in the PBX (PBX/Config/General)! This option is no longer required as you can enable Media Relay for each hardware ID individually.&lt;br /&gt;
&lt;br /&gt;
[[Image:Media-relay-endpoints-1.png]]&lt;br /&gt;
&lt;br /&gt;
=== Configuration of the PBX ===&lt;br /&gt;
Under PBX/Config/General of your Advanced UI you will find a configuration option called &#039;&#039;Media Relay Endpoints&#039;&#039;. You have to enter the public IP address of your firewall or NAT router here. The PBX sends this IP address as the &amp;quot;connection address&amp;quot; in the SDP for all devices that are registered via the reverse proxy and use Media Relay. (see first step)&lt;br /&gt;
&lt;br /&gt;
This is not part of this Step by Step article: If you already have a TURN server in use, you can enable the TURN setting and have not configured a &#039;&#039;&#039;Firewall public IP&#039;&#039;&#039; in your PBX. You need to configure the &#039;&#039;&#039;TURN Public Address&#039;&#039;&#039; in your TURN server settings.  In this case, you would route the RTP traffic to the TURN server first.&lt;br /&gt;
&lt;br /&gt;
[[Image:Media-relay-endpoints-2.png]]&lt;br /&gt;
&lt;br /&gt;
===RTP Range Configuration===&lt;br /&gt;
You need to create an RTP port range on either the PBX or the TURN server, depending on whether the TURN flag is active or not. Please go to IP4/General/Settings on your device (PBX or TURN Server) and configure the &#039;&#039;First UDP-RTP Port&#039;&#039; and then the &#039;&#039;Number of Ports&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[Image:Media-relay-endpoints-3.png]]&lt;br /&gt;
&lt;br /&gt;
===Firewall Configuration===&lt;br /&gt;
You need to create port forwardings on your firewall. Depending on whether the &#039;&#039;TURN&#039;&#039; flag is on or off, a port forwarding for the RTP/UDP ports must be configured towards the PBX (if no &#039;&#039;TURN&#039;&#039; flag is set) or the TURN server (if &#039;&#039;TURN&#039;&#039; flag is set). E.g If you configured a RTP port Range 16384 to 16583, a port forwarding for those exact ports have to be configured on your firewall. &lt;br /&gt;
&lt;br /&gt;
== Verification ==&lt;br /&gt;
&lt;br /&gt;
Please call any extension number in your PBX. You should be able to hear and talk to the other party on the call.&lt;br /&gt;
&lt;br /&gt;
== Known issues ==&lt;br /&gt;
Calling a Voicemail has no audio, while calling a conference there is no audio after the PIN is dialed.&lt;br /&gt;
&lt;br /&gt;
== Related Articles ==&lt;br /&gt;
*[[Reference13r3:Concept Third Party Phones]]&lt;/div&gt;</summary>
		<author><name>Nfi</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Howto13r3:Step-by-Step_Media_Relay_connection_for_third_party_phone&amp;diff=64622</id>
		<title>Howto13r3:Step-by-Step Media Relay connection for third party phone</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Howto13r3:Step-by-Step_Media_Relay_connection_for_third_party_phone&amp;diff=64622"/>
		<updated>2022-12-20T15:31:22Z</updated>

		<summary type="html">&lt;p&gt;Nfi: /* Requirements */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- Keywords: SIP, third, party, phone, media relay, step-by-step, easy--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Step-by-Step]]&lt;br /&gt;
&lt;br /&gt;
{{HOWTOMOD13r3 Translation Info}}&lt;br /&gt;
&lt;br /&gt;
This article defines the recommended configuration to connect third party phones. The configuration ensures media connectivity and compatibility to WebRTC  without relying on ICE and DTLS on the phone.&lt;br /&gt;
&lt;br /&gt;
[[Image:Media-relay-endpoints-overview.png]]&lt;br /&gt;
&lt;br /&gt;
== Purpose ==&lt;br /&gt;
A common problem is that third-party SIP phones do not support ICE or DTLS. As a result audio connections across NAT boundaries are often a challenge. To solve this problem, you can enable Media Relay, but the Media Relay endpoint address must be a public IP address so that the external SIP phone can send its audio to this address.&lt;br /&gt;
&lt;br /&gt;
Furthermore, WebRTC endpoints require ICE and DTLS to establish an audio connection. Since not all SIP phones support these features, enabling Media Relay for these 3rd party phones solves this issue. &lt;br /&gt;
&lt;br /&gt;
=== Features ===&lt;br /&gt;
*Send Audio traffic across NAT boundaries without using the ICE mechanism.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
*The firmware has to be at least 13r3&lt;br /&gt;
*innovaphone PBX&lt;br /&gt;
*3rd party SIP phone&lt;br /&gt;
*A reverse proxy for forwarding SIP messages (optional - only necessary if you connect an external 3rd party phone)&lt;br /&gt;
*TURN Server is not part of this article (optional - you can route RTP traffic to the PBX directly  if you have no TURN server)&lt;br /&gt;
&lt;br /&gt;
== Things to know before you begin ==&lt;br /&gt;
*The public IP address of the network (External IP of the Firewall or NAT Router)&lt;br /&gt;
*You must have access to the firewall or NAT router to be able to configure port forwardings&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
In this scenario, we are going to configure the above picture to allow an external third party SIP device to send its audio to an internal destination. This Wiki article does not explain how to register a SIP phone to an innovaphone PBX via a reverse proxy. If you need help to accomplish this, please read the instructions in our [[Course13:IT_Advanced_2_-_07_Public_access_to_PBX_resources_%28practice%29|Advanced Training Part 2]] materials. &lt;br /&gt;
&lt;br /&gt;
Please register your SIP device to your PBX via the reverse proxy.&lt;br /&gt;
&lt;br /&gt;
=== Configuration on the User Object ===&lt;br /&gt;
Please set the option &#039;&#039;Media Relay&#039;&#039; on the hardware ID of the user object on which your SIP device is registered. Do not set the Media Relay option globally in the PBX (PBX/Config/General)! This option is no longer required as you can enable Media Relay for each hardware ID individually.&lt;br /&gt;
&lt;br /&gt;
[[Image:Media-relay-endpoints-1.png]]&lt;br /&gt;
&lt;br /&gt;
=== Configuration of the PBX ===&lt;br /&gt;
Under PBX/Config/General of your Advanced UI you will find a configuration option called &#039;&#039;Media Relay Endpoints&#039;&#039;. You have to enter the public IP address of your firewall or NAT router here. The PBX sends this IP address as the &amp;quot;connection address&amp;quot; in the SDP for all devices that are registered via the reverse proxy and use Media Relay. (see first step)&lt;br /&gt;
&lt;br /&gt;
If you already have a TURN server in use, you can enable the TURN setting and have not configured a firewall public IP. In this case, you would route the RTP traffic to the TURN server first.&lt;br /&gt;
&lt;br /&gt;
[[Image:Media-relay-endpoints-2.png]]&lt;br /&gt;
&lt;br /&gt;
===RTP Range Configuration===&lt;br /&gt;
You need to create an RTP port range on either the PBX or the TURN server, depending on whether the TURN flag is active or not. Please go to IP4/General/Settings on your device (PBX or TURN Server) and configure the &#039;&#039;First UDP-RTP Port&#039;&#039; and then the &#039;&#039;Number of Ports&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[Image:Media-relay-endpoints-3.png]]&lt;br /&gt;
&lt;br /&gt;
===Firewall Configuration===&lt;br /&gt;
You need to create port forwardings on your firewall. Depending on whether the &#039;&#039;TURN&#039;&#039; flag is on or off, a port forwarding for the RTP/UDP ports must be configured towards the PBX (if no &#039;&#039;TURN&#039;&#039; flag is set) or the TURN server (if &#039;&#039;TURN&#039;&#039; flag is set). E.g If you configured a RTP port Range 16384 to 16583, a port forwarding for those exact ports have to be configured on your firewall. &lt;br /&gt;
&lt;br /&gt;
== Verification ==&lt;br /&gt;
&lt;br /&gt;
Please call any extension number in your PBX. You should be able to hear and talk to the other party on the call.&lt;br /&gt;
&lt;br /&gt;
== Known issues ==&lt;br /&gt;
Calling a Voicemail has no audio, while calling a conference there is no audio after the PIN is dialed.&lt;br /&gt;
&lt;br /&gt;
== Related Articles ==&lt;br /&gt;
*[[Reference13r3:Concept Third Party Phones]]&lt;/div&gt;</summary>
		<author><name>Nfi</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Howto13r3:Step-by-Step_Media_Relay_connection_for_third_party_phone&amp;diff=64621</id>
		<title>Howto13r3:Step-by-Step Media Relay connection for third party phone</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Howto13r3:Step-by-Step_Media_Relay_connection_for_third_party_phone&amp;diff=64621"/>
		<updated>2022-12-20T15:23:13Z</updated>

		<summary type="html">&lt;p&gt;Nfi: /* Limitations */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- Keywords: SIP, third, party, phone, media relay, step-by-step, easy--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Step-by-Step]]&lt;br /&gt;
&lt;br /&gt;
{{HOWTOMOD13r3 Translation Info}}&lt;br /&gt;
&lt;br /&gt;
This article defines the recommended configuration to connect third party phones. The configuration ensures media connectivity and compatibility to WebRTC  without relying on ICE and DTLS on the phone.&lt;br /&gt;
&lt;br /&gt;
[[Image:Media-relay-endpoints-overview.png]]&lt;br /&gt;
&lt;br /&gt;
== Purpose ==&lt;br /&gt;
A common problem is that third-party SIP phones do not support ICE or DTLS. As a result audio connections across NAT boundaries are often a challenge. To solve this problem, you can enable Media Relay, but the Media Relay endpoint address must be a public IP address so that the external SIP phone can send its audio to this address.&lt;br /&gt;
&lt;br /&gt;
Furthermore, WebRTC endpoints require ICE and DTLS to establish an audio connection. Since not all SIP phones support these features, enabling Media Relay for these 3rd party phones solves this issue. &lt;br /&gt;
&lt;br /&gt;
=== Features ===&lt;br /&gt;
*Send Audio traffic across NAT boundaries without using the ICE mechanism.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
*The firmware has to be at least 13r3&lt;br /&gt;
*innovaphone PBX&lt;br /&gt;
*3rd party SIP phone&lt;br /&gt;
*A reverse proxy for forwarding SIP messages (optional - only necessary if you connect an external 3rd party phone)&lt;br /&gt;
*TURN Server (optional - you can route RTP traffic to the PBX directly  if you have no TURN server)&lt;br /&gt;
&lt;br /&gt;
== Things to know before you begin ==&lt;br /&gt;
*The public IP address of the network (External IP of the Firewall or NAT Router)&lt;br /&gt;
*You must have access to the firewall or NAT router to be able to configure port forwardings&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
In this scenario, we are going to configure the above picture to allow an external third party SIP device to send its audio to an internal destination. This Wiki article does not explain how to register a SIP phone to an innovaphone PBX via a reverse proxy. If you need help to accomplish this, please read the instructions in our [[Course13:IT_Advanced_2_-_07_Public_access_to_PBX_resources_%28practice%29|Advanced Training Part 2]] materials. &lt;br /&gt;
&lt;br /&gt;
Please register your SIP device to your PBX via the reverse proxy.&lt;br /&gt;
&lt;br /&gt;
=== Configuration on the User Object ===&lt;br /&gt;
Please set the option &#039;&#039;Media Relay&#039;&#039; on the hardware ID of the user object on which your SIP device is registered. Do not set the Media Relay option globally in the PBX (PBX/Config/General)! This option is no longer required as you can enable Media Relay for each hardware ID individually.&lt;br /&gt;
&lt;br /&gt;
[[Image:Media-relay-endpoints-1.png]]&lt;br /&gt;
&lt;br /&gt;
=== Configuration of the PBX ===&lt;br /&gt;
Under PBX/Config/General of your Advanced UI you will find a configuration option called &#039;&#039;Media Relay Endpoints&#039;&#039;. You have to enter the public IP address of your firewall or NAT router here. The PBX sends this IP address as the &amp;quot;connection address&amp;quot; in the SDP for all devices that are registered via the reverse proxy and use Media Relay. (see first step)&lt;br /&gt;
&lt;br /&gt;
If you already have a TURN server in use, you can enable the TURN setting and have not configured a firewall public IP. In this case, you would route the RTP traffic to the TURN server first.&lt;br /&gt;
&lt;br /&gt;
[[Image:Media-relay-endpoints-2.png]]&lt;br /&gt;
&lt;br /&gt;
===RTP Range Configuration===&lt;br /&gt;
You need to create an RTP port range on either the PBX or the TURN server, depending on whether the TURN flag is active or not. Please go to IP4/General/Settings on your device (PBX or TURN Server) and configure the &#039;&#039;First UDP-RTP Port&#039;&#039; and then the &#039;&#039;Number of Ports&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[Image:Media-relay-endpoints-3.png]]&lt;br /&gt;
&lt;br /&gt;
===Firewall Configuration===&lt;br /&gt;
You need to create port forwardings on your firewall. Depending on whether the &#039;&#039;TURN&#039;&#039; flag is on or off, a port forwarding for the RTP/UDP ports must be configured towards the PBX (if no &#039;&#039;TURN&#039;&#039; flag is set) or the TURN server (if &#039;&#039;TURN&#039;&#039; flag is set). E.g If you configured a RTP port Range 16384 to 16583, a port forwarding for those exact ports have to be configured on your firewall. &lt;br /&gt;
&lt;br /&gt;
== Verification ==&lt;br /&gt;
&lt;br /&gt;
Please call any extension number in your PBX. You should be able to hear and talk to the other party on the call.&lt;br /&gt;
&lt;br /&gt;
== Known issues ==&lt;br /&gt;
Calling a Voicemail has no audio, while calling a conference there is no audio after the PIN is dialed.&lt;br /&gt;
&lt;br /&gt;
== Related Articles ==&lt;br /&gt;
*[[Reference13r3:Concept Third Party Phones]]&lt;/div&gt;</summary>
		<author><name>Nfi</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Howto13r3:Step-by-Step_Media_Relay_connection_for_third_party_phone&amp;diff=64620</id>
		<title>Howto13r3:Step-by-Step Media Relay connection for third party phone</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Howto13r3:Step-by-Step_Media_Relay_connection_for_third_party_phone&amp;diff=64620"/>
		<updated>2022-12-20T15:22:55Z</updated>

		<summary type="html">&lt;p&gt;Nfi: /* Known issues */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- Keywords: SIP, third, party, phone, media relay, step-by-step, easy--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Step-by-Step]]&lt;br /&gt;
&lt;br /&gt;
{{HOWTOMOD13r3 Translation Info}}&lt;br /&gt;
&lt;br /&gt;
This article defines the recommended configuration to connect third party phones. The configuration ensures media connectivity and compatibility to WebRTC  without relying on ICE and DTLS on the phone.&lt;br /&gt;
&lt;br /&gt;
[[Image:Media-relay-endpoints-overview.png]]&lt;br /&gt;
&lt;br /&gt;
== Purpose ==&lt;br /&gt;
A common problem is that third-party SIP phones do not support ICE or DTLS. As a result audio connections across NAT boundaries are often a challenge. To solve this problem, you can enable Media Relay, but the Media Relay endpoint address must be a public IP address so that the external SIP phone can send its audio to this address.&lt;br /&gt;
&lt;br /&gt;
Furthermore, WebRTC endpoints require ICE and DTLS to establish an audio connection. Since not all SIP phones support these features, enabling Media Relay for these 3rd party phones solves this issue. &lt;br /&gt;
&lt;br /&gt;
=== Features ===&lt;br /&gt;
*Send Audio traffic across NAT boundaries without using the ICE mechanism.&lt;br /&gt;
&lt;br /&gt;
=== Limitations ===&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
*The firmware has to be at least 13r3&lt;br /&gt;
*innovaphone PBX&lt;br /&gt;
*3rd party SIP phone&lt;br /&gt;
*A reverse proxy for forwarding SIP messages (optional - only necessary if you connect an external 3rd party phone)&lt;br /&gt;
*TURN Server (optional - you can route RTP traffic to the PBX directly  if you have no TURN server)&lt;br /&gt;
&lt;br /&gt;
== Things to know before you begin ==&lt;br /&gt;
*The public IP address of the network (External IP of the Firewall or NAT Router)&lt;br /&gt;
*You must have access to the firewall or NAT router to be able to configure port forwardings&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
In this scenario, we are going to configure the above picture to allow an external third party SIP device to send its audio to an internal destination. This Wiki article does not explain how to register a SIP phone to an innovaphone PBX via a reverse proxy. If you need help to accomplish this, please read the instructions in our [[Course13:IT_Advanced_2_-_07_Public_access_to_PBX_resources_%28practice%29|Advanced Training Part 2]] materials. &lt;br /&gt;
&lt;br /&gt;
Please register your SIP device to your PBX via the reverse proxy.&lt;br /&gt;
&lt;br /&gt;
=== Configuration on the User Object ===&lt;br /&gt;
Please set the option &#039;&#039;Media Relay&#039;&#039; on the hardware ID of the user object on which your SIP device is registered. Do not set the Media Relay option globally in the PBX (PBX/Config/General)! This option is no longer required as you can enable Media Relay for each hardware ID individually.&lt;br /&gt;
&lt;br /&gt;
[[Image:Media-relay-endpoints-1.png]]&lt;br /&gt;
&lt;br /&gt;
=== Configuration of the PBX ===&lt;br /&gt;
Under PBX/Config/General of your Advanced UI you will find a configuration option called &#039;&#039;Media Relay Endpoints&#039;&#039;. You have to enter the public IP address of your firewall or NAT router here. The PBX sends this IP address as the &amp;quot;connection address&amp;quot; in the SDP for all devices that are registered via the reverse proxy and use Media Relay. (see first step)&lt;br /&gt;
&lt;br /&gt;
If you already have a TURN server in use, you can enable the TURN setting and have not configured a firewall public IP. In this case, you would route the RTP traffic to the TURN server first.&lt;br /&gt;
&lt;br /&gt;
[[Image:Media-relay-endpoints-2.png]]&lt;br /&gt;
&lt;br /&gt;
===RTP Range Configuration===&lt;br /&gt;
You need to create an RTP port range on either the PBX or the TURN server, depending on whether the TURN flag is active or not. Please go to IP4/General/Settings on your device (PBX or TURN Server) and configure the &#039;&#039;First UDP-RTP Port&#039;&#039; and then the &#039;&#039;Number of Ports&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[Image:Media-relay-endpoints-3.png]]&lt;br /&gt;
&lt;br /&gt;
===Firewall Configuration===&lt;br /&gt;
You need to create port forwardings on your firewall. Depending on whether the &#039;&#039;TURN&#039;&#039; flag is on or off, a port forwarding for the RTP/UDP ports must be configured towards the PBX (if no &#039;&#039;TURN&#039;&#039; flag is set) or the TURN server (if &#039;&#039;TURN&#039;&#039; flag is set). E.g If you configured a RTP port Range 16384 to 16583, a port forwarding for those exact ports have to be configured on your firewall. &lt;br /&gt;
&lt;br /&gt;
== Verification ==&lt;br /&gt;
&lt;br /&gt;
Please call any extension number in your PBX. You should be able to hear and talk to the other party on the call.&lt;br /&gt;
&lt;br /&gt;
== Known issues ==&lt;br /&gt;
Calling a Voicemail has no audio, while calling a conference there is no audio after the PIN is dialed.&lt;br /&gt;
&lt;br /&gt;
== Related Articles ==&lt;br /&gt;
*[[Reference13r3:Concept Third Party Phones]]&lt;/div&gt;</summary>
		<author><name>Nfi</name></author>
	</entry>
</feed>