<?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=Tmo</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=Tmo"/>
	<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Special:Contributions/Tmo"/>
	<updated>2026-09-18T18:58:11Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.42.3</generator>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Reference16r1:Concept_myApps_platform_services&amp;diff=80370</id>
		<title>Reference16r1:Concept myApps platform services</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Reference16r1:Concept_myApps_platform_services&amp;diff=80370"/>
		<updated>2026-08-23T10:26:49Z</updated>

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

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

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

		<summary type="html">&lt;p&gt;Tmo: /* Modes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{FIXME|reason=This product is in the beta phase and is not yet finished}}&lt;br /&gt;
&lt;br /&gt;
The innovaphone PBX and apps can be configured to send E-Mails for various subjects and purposes. Major E-Mail providers intent to discontinue the username/password authentication schemes in favour of OAuth2. PBX and Apps version 16r1 does support OAuth2 authentication for SMTP. Here is a step by step guide how to set up OAuth2 support in Microsoft 365 through the Azure Portal and how to set it up on a Google Gmail account in the Google Cloud Console.&lt;br /&gt;
&lt;br /&gt;
== General Information ==&lt;br /&gt;
Most of the large email providers offer the possibility to define an app that is allowed to gain access of a certain scope like SMTP. &amp;lt;br&amp;gt;&lt;br /&gt;
It assigns a Client ID / Client Secret.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Authorization for sending from the mail account needs to be given one time either:&amp;lt;br&amp;gt;&lt;br /&gt;
* By providing resource owner username/password. Sending this to the token endpoint results in an access token and long term refresh token.&lt;br /&gt;
* By interactive authorization via a popup dialogue that is loaded from the authorization endpoint. After the credentials are verified, the dialogue redirects to the redirect URI with an authorization code that is traded to an access token and refresh token.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The access token is sent for authentication in SMTP. It needs regular refresh, which will be done automatically.&lt;br /&gt;
&lt;br /&gt;
=== Modes ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Exchange&#039;&#039;&#039;: Microsoft, with interactive authorization&lt;br /&gt;
* &#039;&#039;&#039;Microsoft 365&#039;&#039;&#039;: Microsoft, without interactive authorization (Resource owner and password has to be filled)&lt;br /&gt;
* &#039;&#039;&#039;Gmail&#039;&#039;&#039;: Google, with interactive authorization&lt;br /&gt;
* &#039;&#039;&#039;Google Service Account&#039;&#039;&#039;:  Google, without interactive authorization (Client e-mail, Private Key ID and Private Key of the service account must be provided)&lt;br /&gt;
* &#039;&#039;&#039;Client secret post&#039;&#039;&#039;: Generic configuration where all parameters of the client secret post OAuth2 flow can be set.&lt;br /&gt;
* &#039;&#039;&#039;Private key jwt&#039;&#039;&#039;: Generic configuration where all parameters of the private key jwt OAuth2 flow can be set.&lt;br /&gt;
&lt;br /&gt;
== Microsoft 365 ==&lt;br /&gt;
=== Azure Portal ===&lt;br /&gt;
Log in to Microsoft Azure Portal (https://portal.azure.com) and go to Microsoft Entra ID.&lt;br /&gt;
[[File:AzureMicrosoftEntraID.png|none|thumb|600x600px|/AzureMicrosoftEntraID.png|/AzureMicrosoftEntraID.png]]&lt;br /&gt;
Add a new app registration to create client credentials.&lt;br /&gt;
[[File:AzureAddAppRegistration.png|none|thumb|600x600px|/AzureAddAppRegistration.png|/AzureAddAppRegistration.png]]&lt;br /&gt;
Register the application and maybe already fill in the redirect URI for Web based application type to path OAUTH2-CLIENT/auth.htm at the PBX.&lt;br /&gt;
[[File:AzureRegisterAnApplication.png|none|thumb|600x600px|/AzureRegisterAnApplication.png|/AzureRegisterAnApplication.png]]&lt;br /&gt;
App registration is complete. Client ID and tenant needs to be configured at the PBX and every app that will be sending e-mails.&lt;br /&gt;
[[File:AzureApp.png|none|thumb|600x600px|/AzureApp.png|/AzureApp.png]]&lt;br /&gt;
Create a client secret. Note that expiry is limited to no longer than 2 years. The client secret must be renewed before expiry and the new secret configured and interactive authorisation carried out again to ensure continuous operation.&lt;br /&gt;
[[File:AzureAddClientSecret.png|none|thumb|600x600px|/AzureAddClientSecret.png|/AzureAddClientSecret.png]]&lt;br /&gt;
Copy the client secret. It also needs to be configured at the PBX and every app that will be sending e-mails.&lt;br /&gt;
[[File:AzureCopyClientSecret.png|none|thumb|600x600px|/AzureCopyClientSecret.png|/AzureCopyClientSecret.png]]&lt;br /&gt;
Add permissions located in APIs my organization uses.&lt;br /&gt;
[[File:AzureAddApiPermissionMyOrganization.png|none|thumb|600x600px|/AzureAddApiPermissionMyOrganization.png|/AzureAddApiPermissionMyOrganization.png]]&lt;br /&gt;
More precisely located in Office 365 Exchange Online.&lt;br /&gt;
[[File:AzureAddApiPermissionExchange.png|none|thumb|600x600px|/AzureAddApiPermissionExchange.png|/AzureAddApiPermissionExchange.png]]&lt;br /&gt;
And there in the application permissions.&lt;br /&gt;
[[File:AzureAddApiExchangeApplication.png|none|thumb|600x600px|/AzureAddApiExchangeApplication.png|/AzureAddApiExchangeApplication.png]]&lt;br /&gt;
Namely SMTP Mail.Send.&lt;br /&gt;
[[File:AzureAddApiSendMailAsUser.png|none|thumb|600x600px|/AzureAddApiSendMailAsUser.png|/AzureAddApiSendMailAsUser.png]]&lt;br /&gt;
Grant admin permission for Mail.Send.&lt;br /&gt;
[[File:AzureGrantApiPermissions.png|none|thumb|600x600px|/AzureGrantApiPermissions.png|/AzureGrantApiPermissions.png]]&lt;br /&gt;
API permissions are now granted.&lt;br /&gt;
[[File:AzureApiPermissionsGranted.png|none|thumb|600x600px|/AzureApiPermissionsGranted.png|/AzureApiPermissionsGranted.png]]&lt;br /&gt;
Tell all redirect URIs that the PBX and the apps will be using during interactive authorization.&lt;br /&gt;
[[File:AzureRedirectUris.png|none|thumb|600x600px|/AzureRedirectUris.png|/AzureRedirectUris.png]]&lt;br /&gt;
Allow public client flows of OAuth2. Resource Owner Password Credentials Flow has the advantage that it doesn&#039;t need interactive authorization.&lt;br /&gt;
[[File:AzureAllowPublicClientFlows.png|none|thumb|600x600px|/AzureAllowPublicClientFlows.png|/AzureAllowPublicClientFlows.png]]&lt;br /&gt;
&lt;br /&gt;
=== Microsoft 365 admin center ===&lt;br /&gt;
Log in to the Microsoft 365 admin center (https://admin.cloud.microsoft).&lt;br /&gt;
[[File:MS365AdminCenter.png|none|thumb|600x600px|/MS365AdminCenter.png|/MS365AdminCenter.png]]&lt;br /&gt;
Make sure that Microsoft 365 licenses are assigned to your user.&lt;br /&gt;
[[File:MS365UserLicenses.png|none|thumb|600x600px|/MS365UserLicenses.png|/MS365UserLicenses.png]]&lt;br /&gt;
Set your user active.&lt;br /&gt;
[[File:MS365ActiveUsers.png|none|thumb|600x600px|/MS365ActiveUsers.png|/MS365ActiveUsers.png]]&lt;br /&gt;
Locate the Mail tab of your user.&lt;br /&gt;
[[File:MS365UserEMail.png|none|thumb|600x600px|/MS365UserEMail.png|/MS365UserEMail.png]]&lt;br /&gt;
Allow authenticated SMTP.&lt;br /&gt;
[[File:MS365AuthenticatedSMTP.png|none|thumb|600x600px|/MS365AuthenticatedSMTP.png|/MS365AuthenticatedSMTP.png]]&lt;br /&gt;
&lt;br /&gt;
=== Exchange admin center ===&lt;br /&gt;
Login to the Exchange admin center (https://admin.exchange.microsoft.com).&lt;br /&gt;
[[File:ExchangeAdminCenter.png|none|thumb|600x600px|/ExchangeAdminCenter.png|/ExchangeAdminCenter.png]]&lt;br /&gt;
Remove deactivation of the SMTP AUTH protocol.&lt;br /&gt;
[[File:ExchangeRemoveDeavtivatedOAuth2.png|none|thumb|600x600px|/ExchangeRemoveDeavtivatedOAuth2.png|/ExchangeRemoveDeavtivatedOAuth2.png]]&lt;br /&gt;
&lt;br /&gt;
=== PBX Example configuration === &lt;br /&gt;
With this Microsoft setup the OAuth2 configuration for the resource owner password credentials flow can be filled in as follows. &lt;br /&gt;
[[File:OAuth2ResourceOwnerPasswordCredentials.png|none|thumb|600x600px|/OAuth2ResourceOwnerPasswordCredentials.png|/OAuth2ResourceOwnerPasswordCredentials.png]]&lt;br /&gt;
For interactive authorization this is the OAuth2 configuration. Authorize e-mail access one time and send a test mail to verify everything went well.&lt;br /&gt;
[[File:OAuth2InteractiveAuthorization.png|none|thumb|600x600px|/OAuth2InteractiveAuthorization.png|/OAuth2InteractiveAuthorization.png]]&lt;br /&gt;
&lt;br /&gt;
== Gmail ==&lt;br /&gt;
=== Preparations === &lt;br /&gt;
Login to the Google Cloud Console (https://console.cloud.google.com), select a project, New project.&lt;br /&gt;
[[File:GoogleSelectProject.png|none|thumb|600x600px|/GoogleSelectProject.png|/GoogleSelectProject.png]]&lt;br /&gt;
Create the project.&lt;br /&gt;
[[File:GoogleCreateProject.png|none|thumb|600x600px|/GoogleCreateProject.png|/GoogleCreateProject.png]]&lt;br /&gt;
Client credentials will be created in this project.&lt;br /&gt;
[[File:GoogleProjectCreated.png|none|thumb|600x600px|/GoogleProjectCreated.png|/GoogleProjectCreated.png]]&lt;br /&gt;
From the library specify the APIs needed to access.&lt;br /&gt;
[[File:GoogleApisServicesFromLibrary.png|none|thumb|600x600px|/GoogleApisServicesFromLibrary.png|/GoogleApisServicesFromLibrary.png]]&lt;br /&gt;
These are in the Gmail API.&lt;br /&gt;
[[File:GoogleApisServicesApiLibrary.png|none|thumb|600x600px|/GoogleApisServicesApiLibrary.png|/GoogleApisServicesApiLibrary.png]]&lt;br /&gt;
Choose the Gmail API and enable it.&lt;br /&gt;
[[File:GoogleGmailApis.png|none|thumb|600x600px|/GoogleGmailApis.png|/GoogleGmailApis.png]]&lt;br /&gt;
Credentials need to be created.&lt;br /&gt;
[[File:GoogleGmailApiAdded.png|none|thumb|600x600px|/GoogleGmailApiAdded.png|/GoogleGmailApiAdded.png]]&lt;br /&gt;
Invoke the help me choose wizard.&lt;br /&gt;
[[File:GoogleCreateCredentialsHelpMeChoose.png|none|thumb|600x600px|/GoogleCreateCredentialsHelpMeChoose.png|/GoogleCreateCredentialsHelpMeChoose.png]]&lt;br /&gt;
User data access is needed.&lt;br /&gt;
[[File:GoogleCredentialsUserData.png|none|thumb|600x600px|/GoogleCredentialsUserData.png|/GoogleCredentialsUserData.png]]&lt;br /&gt;
Configure the consent screen of the interactive authorization.&lt;br /&gt;
[[File:GoogleOAuthConsentScreen.png|none|thumb|600x600px|/GoogleOAuthConsentScreen.png|/GoogleOAuthConsentScreen.png]]&lt;br /&gt;
Specify the permissions that need to be authorized by the user.&lt;br /&gt;
[[File:GoogleOAuthScopes.png|none|thumb|600x600px|/GoogleOAuthScopes.png|/GoogleOAuthScopes.png]]&lt;br /&gt;
Its mail.google.com in general.&lt;br /&gt;
[[File:GoogleScopeMailGoogleCom.png|none|thumb|600x600px|/GoogleScopeMailGoogleCom.png|/GoogleScopeMailGoogleCom.png]]&lt;br /&gt;
And its to send email on the users behalf.&lt;br /&gt;
[[File:GoogleScopeAuthGmailSend.png|none|thumb|600x600px|/GoogleScopeAuthGmailSend.png|/GoogleScopeAuthGmailSend.png]]&lt;br /&gt;
These are the scopes needed.&lt;br /&gt;
[[File:GoogleScopes.png|none|thumb|600x600px|/GoogleScopes.png|/GoogleScopes.png]]&lt;br /&gt;
Ask client credentials for Web type application.&lt;br /&gt;
[[File:GoogleOAuthClientID.png|none|thumb|600x600px|/GoogleOAuthClientID.png|/GoogleOAuthClientID.png]]&lt;br /&gt;
Tell all redirect URIs that the PBX and the apps will be using during interactive authorization.&lt;br /&gt;
[[File:GoogleRedirectURIs.png|none|thumb|600x600px|/GoogleRedirectURIs.png|/GoogleRedirectURIs.png]]&lt;br /&gt;
Download the credentials. This json file contains all information for OAuth2 configuration.&lt;br /&gt;
[[File:GoogleClientCredentialsDownload.png|none|thumb|600x600px|/GoogleClientCredentialsDownload.png|/GoogleClientCredentialsDownload.png]]&lt;br /&gt;
Customize the OAuth consent screen&lt;br /&gt;
[[File:GoogleOAuthConsentScreenSettings.png|none|thumb|600x600px|/GoogleOAuthConsentScreenSettings.png|/GoogleOAuthConsentScreenSettings.png]]&lt;br /&gt;
Start the customization wizard.&lt;br /&gt;
[[File:GoogleConsentScreenWizard.png|none|thumb|600x600px|/GoogleConsentScreenWizard.png|/GoogleConsentScreenWizard.png]]&lt;br /&gt;
Choose which users may authorize.&lt;br /&gt;
[[File:GoogleAudienceExternal.png|none|thumb|600x600px|/GoogleAudienceExternal.png|/GoogleAudienceExternal.png]]&lt;br /&gt;
Google workspace users may choose internal audience. Users not in Google workspace proceed with external.&lt;br /&gt;
[[File:GoogleContactInformation.png|none|thumb|600x600px|/GoogleContactInformation.png|/GoogleContactInformation.png]]&lt;br /&gt;
Add a test user.&lt;br /&gt;
[[File:GoogleTestUserAdded.png|none|thumb|600x600px|/GoogleTestUserAdded.png|/GoogleTestUserAdded.png]]&lt;br /&gt;
&lt;br /&gt;
=== PBX Example configuration === &lt;br /&gt;
The OAuth2 parameters can be filled in with the information from the json file downloaded above. Authorize e-mail access one time and send a test mail to verify everything went well.&lt;br /&gt;
[[File:OAuth2InteractiveGmail.png|none|thumb|600x600px|/OAuth2InteractiveGmail.png|/OAuth2InteractiveGmail.png]]&lt;br /&gt;
&lt;br /&gt;
== Generic ==&lt;br /&gt;
&lt;br /&gt;
For other e-mail providers the client secret post OAuth2 flow may be configured in a generic way. Details need to be supplied by the e-mail provider.&lt;br /&gt;
&lt;br /&gt;
For the Microsoft 365 setup above it would be as follows with Token endpoint &#039;&#039;&amp;lt;nowiki&amp;gt;https://login.microsoftonline.com/af326a34-169c-469e-946b-1ef57925306b/oauth2/v2.0/token&amp;lt;/nowiki&amp;gt;&#039;&#039; Authorization URL &#039;&#039;&amp;lt;nowiki&amp;gt;https://login.microsoftonline.com/af326a34-169c-469e-946b-1ef57925306b/oauth2/v2.0/authorize?scope=https://outlook.office.com/SMTP.Send&amp;lt;/nowiki&amp;gt; offline_access&#039;&#039; The configuration appends &#039;&#039;&amp;amp;response_type=code&amp;amp;prompt=consent&amp;amp;login_hint=...&amp;amp;redirect_uri=...&amp;amp;client_id=...&#039;&#039; automatically.[[File:OAuth2ClientSecretPost.png|none|thumb|600x600px|/OAuth2ClientSecretPost.png|/OAuth2ClientSecretPost.png]]&lt;br /&gt;
For the Gmail example above the generic confguration would be like this with Token endpoint &#039;&#039;&amp;lt;nowiki&amp;gt;https://oauth2.googleapis.com/token&amp;lt;/nowiki&amp;gt;&#039;&#039; Authorization URL &#039;&#039;&amp;lt;nowiki&amp;gt;https://accounts.google.com/o/oauth2/auth?access_type=offline&amp;amp;scope=https://mail.google.com/&amp;lt;/nowiki&amp;gt;&#039;&#039; The configuration appends &#039;&#039;&amp;amp;response_type=code&amp;amp;prompt=consent&amp;amp;login_hint=...&amp;amp;redirect_uri=...&amp;amp;client_id=...&#039;&#039; automatically.&lt;br /&gt;
[[File:OAith2ClientSecretPostGmail.png|none|thumb|600x600px|/OAith2ClientSecretPostGmail.png|/OAith2ClientSecretPostGmail.png]]&lt;br /&gt;
The private key jwt OAuth2 flow can be configured generically as well.[[File:OAuth2PrivateKeyJWT.png|none|thumb|600x600px|/OAuth2PrivateKeyJWT.png|/OAuth2PrivateKeyJWT.png]]&lt;br /&gt;
&lt;br /&gt;
== Related Articles ==&lt;br /&gt;
https://wiki.innovaphone.com/index.php?title=Reference16r1:PBX/Config/Authentication&lt;/div&gt;</summary>
		<author><name>Tmo</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Howto16r1:Configure_OAuth2_E-Mail&amp;diff=78189</id>
		<title>Howto16r1:Configure OAuth2 E-Mail</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Howto16r1:Configure_OAuth2_E-Mail&amp;diff=78189"/>
		<updated>2025-10-08T21:26:50Z</updated>

		<summary type="html">&lt;p&gt;Tmo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{FIXME|reason=This product is in the beta phase and is not yet finished}}&lt;br /&gt;
&lt;br /&gt;
The innovaphone PBX and apps can be configured to send E-Mails for various subjects and purposes. Major E-Mail providers intent to discontinue the username/password authentication schemes in favour of OAuth2. PBX and Apps version 16r1 does support OAuth2 authentication for SMTP. Here is a step by step guide how to set up OAuth2 support in Microsoft 365 through the Azure Portal and how to set it up on a Google Gmail account in the Google Cloud Console.&lt;br /&gt;
&lt;br /&gt;
== Principle ==&lt;br /&gt;
The e-mail provider enables definition of an app that is allowed to gain access of a certain scope like SMTP. It assigns a Client ID / Client Secret.&lt;br /&gt;
&lt;br /&gt;
Authorization for sending from the mail account needs to be given one time:&lt;br /&gt;
by providing resource owner username/password. Sending this to the token endpoint results in an access token and long term refresh token.&lt;br /&gt;
or interactively via the dialog that is loaded from the authorization endpoint. On agreement the dialog redirects to the redirect URI with an authorization code that is traded to an access token and refresh token.&lt;br /&gt;
&lt;br /&gt;
The access token is sent for authentication in SMTP. It needs regular refresh.&lt;br /&gt;
&lt;br /&gt;
== Microsoft 365 ==&lt;br /&gt;
=== Azure Portal ===&lt;br /&gt;
Log in to Microsoft Azure Portal (https://portal.azure.com) and go to Microsoft Entra ID.&lt;br /&gt;
[[File:AzureMicrosoftEntraID.png|none|thumb|600x600px|/AzureMicrosoftEntraID.png|/AzureMicrosoftEntraID.png]]&lt;br /&gt;
Add a new app registration to create client credentials.&lt;br /&gt;
[[File:AzureAddAppRegistration.png|none|thumb|600x600px|/AzureAddAppRegistration.png|/AzureAddAppRegistration.png]]&lt;br /&gt;
Register the application and maybe already fill in the redirect URI for Web based application type to path OAUTH2-CLIENT/auth.htm at the PBX.&lt;br /&gt;
[[File:AzureRegisterAnApplication.png|none|thumb|600x600px|/AzureRegisterAnApplication.png|/AzureRegisterAnApplication.png]]&lt;br /&gt;
App registration is complete. Client ID and tenant needs to be configured at the PBX and every app that will be sending e-mails.&lt;br /&gt;
[[File:AzureApp.png|none|thumb|600x600px|/AzureApp.png|/AzureApp.png]]&lt;br /&gt;
Create a client secret. Note that expiry is limited to no longer than 2 years. The client secret must be renewed before expiry and the new secret configured and interactive authorisation carried out again to ensure continuous operation.&lt;br /&gt;
[[File:AzureAddClientSecret.png|none|thumb|600x600px|/AzureAddClientSecret.png|/AzureAddClientSecret.png]]&lt;br /&gt;
Copy the client secret. It also needs to be configured at the PBX and every app that will be sending e-mails.&lt;br /&gt;
[[File:AzureCopyClientSecret.png|none|thumb|600x600px|/AzureCopyClientSecret.png|/AzureCopyClientSecret.png]]&lt;br /&gt;
Add permissions located in APIs my organization uses.&lt;br /&gt;
[[File:AzureAddApiPermissionMyOrganization.png|none|thumb|600x600px|/AzureAddApiPermissionMyOrganization.png|/AzureAddApiPermissionMyOrganization.png]]&lt;br /&gt;
More precisely located in Office 365 Exchange Online.&lt;br /&gt;
[[File:AzureAddApiPermissionExchange.png|none|thumb|600x600px|/AzureAddApiPermissionExchange.png|/AzureAddApiPermissionExchange.png]]&lt;br /&gt;
And there in the application permissions.&lt;br /&gt;
[[File:AzureAddApiExchangeApplication.png|none|thumb|600x600px|/AzureAddApiExchangeApplication.png|/AzureAddApiExchangeApplication.png]]&lt;br /&gt;
Namely SMTP Mail.Send.&lt;br /&gt;
[[File:AzureAddApiSendMailAsUser.png|none|thumb|600x600px|/AzureAddApiSendMailAsUser.png|/AzureAddApiSendMailAsUser.png]]&lt;br /&gt;
Grant admin permission for Mail.Send.&lt;br /&gt;
[[File:AzureGrantApiPermissions.png|none|thumb|600x600px|/AzureGrantApiPermissions.png|/AzureGrantApiPermissions.png]]&lt;br /&gt;
API permissions are now granted.&lt;br /&gt;
[[File:AzureApiPermissionsGranted.png|none|thumb|600x600px|/AzureApiPermissionsGranted.png|/AzureApiPermissionsGranted.png]]&lt;br /&gt;
Tell all redirect URIs that the PBX and the apps will be using during interactive authorization.&lt;br /&gt;
[[File:AzureRedirectUris.png|none|thumb|600x600px|/AzureRedirectUris.png|/AzureRedirectUris.png]]&lt;br /&gt;
Allow public client flows of OAuth2. Resource Owner Password Credentials Flow has the advantage that it doesn&#039;t need interactive authorization.&lt;br /&gt;
[[File:AzureAllowPublicClientFlows.png|none|thumb|600x600px|/AzureAllowPublicClientFlows.png|/AzureAllowPublicClientFlows.png]]&lt;br /&gt;
&lt;br /&gt;
=== Microsoft 365 admin center ===&lt;br /&gt;
Log in to the Microsoft 365 admin center (https://admin.cloud.microsoft).&lt;br /&gt;
[[File:MS365AdminCenter.png|none|thumb|600x600px|/MS365AdminCenter.png|/MS365AdminCenter.png]]&lt;br /&gt;
Make sure that Microsoft 365 licenses are assigned to your user.&lt;br /&gt;
[[File:MS365UserLicenses.png|none|thumb|600x600px|/MS365UserLicenses.png|/MS365UserLicenses.png]]&lt;br /&gt;
Set your user active.&lt;br /&gt;
[[File:MS365ActiveUsers.png|none|thumb|600x600px|/MS365ActiveUsers.png|/MS365ActiveUsers.png]]&lt;br /&gt;
Locate the Mail tab of your user.&lt;br /&gt;
[[File:MS365UserEMail.png|none|thumb|600x600px|/MS365UserEMail.png|/MS365UserEMail.png]]&lt;br /&gt;
Allow authenticated SMTP.&lt;br /&gt;
[[File:MS365AuthenticatedSMTP.png|none|thumb|600x600px|/MS365AuthenticatedSMTP.png|/MS365AuthenticatedSMTP.png]]&lt;br /&gt;
&lt;br /&gt;
=== Exchange admin center ===&lt;br /&gt;
Login to the Exchange admin center (https://admin.exchange.microsoft.com).&lt;br /&gt;
[[File:ExchangeAdminCenter.png|none|thumb|600x600px|/ExchangeAdminCenter.png|/ExchangeAdminCenter.png]]&lt;br /&gt;
Remove deactivation of the SMTP AUTH protocol.&lt;br /&gt;
[[File:ExchangeRemoveDeavtivatedOAuth2.png|none|thumb|600x600px|/ExchangeRemoveDeavtivatedOAuth2.png|/ExchangeRemoveDeavtivatedOAuth2.png]]&lt;br /&gt;
&lt;br /&gt;
=== PBX Example configuration === &lt;br /&gt;
With this Microsoft setup the OAuth2 configuration for the resource owner password credentials flow can be filled in as follows. &lt;br /&gt;
[[File:OAuth2ResourceOwnerPasswordCredentials.png|none|thumb|600x600px|/OAuth2ResourceOwnerPasswordCredentials.png|/OAuth2ResourceOwnerPasswordCredentials.png]]&lt;br /&gt;
For interactive authorization this is the OAuth2 configuration. Authorize e-mail access one time and send a test mail to verify everything went well.&lt;br /&gt;
[[File:OAuth2InteractiveAuthorization.png|none|thumb|600x600px|/OAuth2InteractiveAuthorization.png|/OAuth2InteractiveAuthorization.png]]&lt;br /&gt;
&lt;br /&gt;
== Gmail ==&lt;br /&gt;
=== Preparations === &lt;br /&gt;
Login to the Google Cloud Console (https://console.cloud.google.com), select a project, New project.&lt;br /&gt;
[[File:GoogleSelectProject.png|none|thumb|600x600px|/GoogleSelectProject.png|/GoogleSelectProject.png]]&lt;br /&gt;
Create the project.&lt;br /&gt;
[[File:GoogleCreateProject.png|none|thumb|600x600px|/GoogleCreateProject.png|/GoogleCreateProject.png]]&lt;br /&gt;
Client credentials will be created in this project.&lt;br /&gt;
[[File:GoogleProjectCreated.png|none|thumb|600x600px|/GoogleProjectCreated.png|/GoogleProjectCreated.png]]&lt;br /&gt;
From the library specify the APIs needed to access.&lt;br /&gt;
[[File:GoogleApisServicesFromLibrary.png|none|thumb|600x600px|/GoogleApisServicesFromLibrary.png|/GoogleApisServicesFromLibrary.png]]&lt;br /&gt;
These are in the Gmail API.&lt;br /&gt;
[[File:GoogleApisServicesApiLibrary.png|none|thumb|600x600px|/GoogleApisServicesApiLibrary.png|/GoogleApisServicesApiLibrary.png]]&lt;br /&gt;
Choose the Gmail API and enable it.&lt;br /&gt;
[[File:GoogleGmailApis.png|none|thumb|600x600px|/GoogleGmailApis.png|/GoogleGmailApis.png]]&lt;br /&gt;
Credentials need to be created.&lt;br /&gt;
[[File:GoogleGmailApiAdded.png|none|thumb|600x600px|/GoogleGmailApiAdded.png|/GoogleGmailApiAdded.png]]&lt;br /&gt;
Invoke the help me choose wizard.&lt;br /&gt;
[[File:GoogleCreateCredentialsHelpMeChoose.png|none|thumb|600x600px|/GoogleCreateCredentialsHelpMeChoose.png|/GoogleCreateCredentialsHelpMeChoose.png]]&lt;br /&gt;
User data access is needed.&lt;br /&gt;
[[File:GoogleCredentialsUserData.png|none|thumb|600x600px|/GoogleCredentialsUserData.png|/GoogleCredentialsUserData.png]]&lt;br /&gt;
Configure the consent screen of the interactive authorization.&lt;br /&gt;
[[File:GoogleOAuthConsentScreen.png|none|thumb|600x600px|/GoogleOAuthConsentScreen.png|/GoogleOAuthConsentScreen.png]]&lt;br /&gt;
Specify the permissions that need to be authorized by the user.&lt;br /&gt;
[[File:GoogleOAuthScopes.png|none|thumb|600x600px|/GoogleOAuthScopes.png|/GoogleOAuthScopes.png]]&lt;br /&gt;
Its mail.google.com in general.&lt;br /&gt;
[[File:GoogleScopeMailGoogleCom.png|none|thumb|600x600px|/GoogleScopeMailGoogleCom.png|/GoogleScopeMailGoogleCom.png]]&lt;br /&gt;
And its to send email on the users behalf.&lt;br /&gt;
[[File:GoogleScopeAuthGmailSend.png|none|thumb|600x600px|/GoogleScopeAuthGmailSend.png|/GoogleScopeAuthGmailSend.png]]&lt;br /&gt;
These are the scopes needed.&lt;br /&gt;
[[File:GoogleScopes.png|none|thumb|600x600px|/GoogleScopes.png|/GoogleScopes.png]]&lt;br /&gt;
Ask client credentials for Web type application.&lt;br /&gt;
[[File:GoogleOAuthClientID.png|none|thumb|600x600px|/GoogleOAuthClientID.png|/GoogleOAuthClientID.png]]&lt;br /&gt;
Tell all redirect URIs that the PBX and the apps will be using during interactive authorization.&lt;br /&gt;
[[File:GoogleRedirectURIs.png|none|thumb|600x600px|/GoogleRedirectURIs.png|/GoogleRedirectURIs.png]]&lt;br /&gt;
Download the credentials. This json file contains all information for OAuth2 configuration.&lt;br /&gt;
[[File:GoogleClientCredentialsDownload.png|none|thumb|600x600px|/GoogleClientCredentialsDownload.png|/GoogleClientCredentialsDownload.png]]&lt;br /&gt;
Customize the OAuth consent screen&lt;br /&gt;
[[File:GoogleOAuthConsentScreenSettings.png|none|thumb|600x600px|/GoogleOAuthConsentScreenSettings.png|/GoogleOAuthConsentScreenSettings.png]]&lt;br /&gt;
Start the customization wizard.&lt;br /&gt;
[[File:GoogleConsentScreenWizard.png|none|thumb|600x600px|/GoogleConsentScreenWizard.png|/GoogleConsentScreenWizard.png]]&lt;br /&gt;
Choose which users may authorize.&lt;br /&gt;
[[File:GoogleAudienceExternal.png|none|thumb|600x600px|/GoogleAudienceExternal.png|/GoogleAudienceExternal.png]]&lt;br /&gt;
Google workspace users may choose internal audience. Users not in Google workspace proceed with external.&lt;br /&gt;
[[File:GoogleContactInformation.png|none|thumb|600x600px|/GoogleContactInformation.png|/GoogleContactInformation.png]]&lt;br /&gt;
Add a test user.&lt;br /&gt;
[[File:GoogleTestUserAdded.png|none|thumb|600x600px|/GoogleTestUserAdded.png|/GoogleTestUserAdded.png]]&lt;br /&gt;
&lt;br /&gt;
=== PBX Example configuration === &lt;br /&gt;
The OAuth2 parameters can be filled in with the information from the json file downloaded above. Authorize e-mail access one time and send a test mail to verify everything went well.&lt;br /&gt;
[[File:OAuth2InteractiveGmail.png|none|thumb|600x600px|/OAuth2InteractiveGmail.png|/OAuth2InteractiveGmail.png]]&lt;br /&gt;
&lt;br /&gt;
== Generic ==&lt;br /&gt;
&lt;br /&gt;
For other e-mail providers the client secret post OAuth2 flow may be configured in a generic way. Details need to be supplied by the e-mail provider.&lt;br /&gt;
&lt;br /&gt;
For the Microsoft 365 setup above it would be as follows with Token endpoint &#039;&#039;&amp;lt;nowiki&amp;gt;https://login.microsoftonline.com/af326a34-169c-469e-946b-1ef57925306b/oauth2/v2.0/token&amp;lt;/nowiki&amp;gt;&#039;&#039; Authorization URL &#039;&#039;&amp;lt;nowiki&amp;gt;https://login.microsoftonline.com/af326a34-169c-469e-946b-1ef57925306b/oauth2/v2.0/authorize?scope=https://outlook.office.com/SMTP.Send&amp;lt;/nowiki&amp;gt; offline_access&#039;&#039; The configuration appends &#039;&#039;&amp;amp;response_type=code&amp;amp;prompt=consent&amp;amp;login_hint=...&amp;amp;redirect_uri=...&amp;amp;client_id=...&#039;&#039; automatically.[[File:OAuth2ClientSecretPost.png|none|thumb|600x600px|/OAuth2ClientSecretPost.png|/OAuth2ClientSecretPost.png]]&lt;br /&gt;
For the Gmail example above the generic confguration would be like this with Token endpoint &#039;&#039;&amp;lt;nowiki&amp;gt;https://oauth2.googleapis.com/token&amp;lt;/nowiki&amp;gt;&#039;&#039; Authorization URL &#039;&#039;&amp;lt;nowiki&amp;gt;https://accounts.google.com/o/oauth2/auth?access_type=offline&amp;amp;scope=https://mail.google.com/&amp;lt;/nowiki&amp;gt;&#039;&#039; The configuration appends &#039;&#039;&amp;amp;response_type=code&amp;amp;prompt=consent&amp;amp;login_hint=...&amp;amp;redirect_uri=...&amp;amp;client_id=...&#039;&#039; automatically.&lt;br /&gt;
[[File:OAith2ClientSecretPostGmail.png|none|thumb|600x600px|/OAith2ClientSecretPostGmail.png]]&lt;br /&gt;
The private key jwt OAuth2 flow can be configured generically as well.[[File:OAuth2PrivateKeyJWT.png|none|thumb|600x600px|/OAuth2PrivateKeyJWT.png|/OAuth2PrivateKeyJWT.png]]&lt;br /&gt;
&lt;br /&gt;
== Related Articles ==&lt;br /&gt;
https://wiki.innovaphone.com/index.php?title=Reference16r1:PBX/Config/Authentication&lt;/div&gt;</summary>
		<author><name>Tmo</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Reference16r1:Apps/PbxManager/Email&amp;diff=78170</id>
		<title>Reference16r1:Apps/PbxManager/Email</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Reference16r1:Apps/PbxManager/Email&amp;diff=78170"/>
		<updated>2025-10-06T11:38:15Z</updated>

		<summary type="html">&lt;p&gt;Tmo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{FIXME|reason=This product is in the beta phase and is not yet finished}}&lt;br /&gt;
This PBX Manager Plugin configures the E-Mail Account of all PBXes in the system. The same configuration can be found in the advanced UI of the individual PBXes at [[Reference13r2:PBX/Config/Authentication|PBX/Config/Authentication]].&lt;br /&gt;
&lt;br /&gt;
== Add Email Account ==&lt;br /&gt;
; SMTP Server&lt;br /&gt;
: Your SMTP Server&lt;br /&gt;
&lt;br /&gt;
; Email Address&lt;br /&gt;
: The used From Address&lt;br /&gt;
&lt;br /&gt;
; Username&lt;br /&gt;
: The username for the authorization&lt;br /&gt;
&lt;br /&gt;
; Password&lt;br /&gt;
: The password for the authorization&lt;br /&gt;
&lt;br /&gt;
; Sender&#039;s name&lt;br /&gt;
: The used Name in the From field&lt;br /&gt;
&lt;br /&gt;
; OAuth2&lt;br /&gt;
: Alternatively OAuth2 credentials to authenticate for e-mail sending. See [[Howto16r1:Configure_OAuth2_E-Mail]].&lt;/div&gt;</summary>
		<author><name>Tmo</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Reference13r1:Services/Logging&amp;diff=78169</id>
		<title>Reference13r1:Services/Logging</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Reference13r1:Services/Logging&amp;diff=78169"/>
		<updated>2025-10-06T11:35:54Z</updated>

		<summary type="html">&lt;p&gt;Tmo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Log Server ==&lt;br /&gt;
External &#039;&#039;&#039;logging&#039;&#039;&#039; is disabled by default (Off). You can still view log messages in real time (see [[Reference7:Administration/Diagnostics/Logging|Logging]]), but messages are not stored or sent to an external destination.&lt;br /&gt;
&lt;br /&gt;
Available &#039;&#039;Type&#039;&#039;s:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|valign=top nowrap=true|&#039;&#039;&#039;Off:&#039;&#039;&#039;&lt;br /&gt;
| Logging is disabled.&lt;br /&gt;
|-&lt;br /&gt;
|valign=top nowrap=true|&#039;&#039;&#039;TCP:&#039;&#039;&#039;&lt;br /&gt;
| The device transmits the syslog entries using a TCP connection.&lt;br /&gt;
* In the &#039;&#039;&#039;Address&#039;&#039;&#039; field, the remote IP-address is entered.&lt;br /&gt;
* In the &#039;&#039;&#039;Port&#039;&#039;&#039; field, the remote port is specified.&lt;br /&gt;
|-&lt;br /&gt;
|valign=top nowrap=true|&#039;&#039;&#039;SYSLOG:&#039;&#039;&#039;&lt;br /&gt;
| The syslog entries are transmitted to a syslog recipient (also referred to as syslogd, syslog server or syslog daemon).&lt;br /&gt;
* In the &#039;&#039;&#039;Address&#039;&#039;&#039; field, the IP-address of the syslogd server is entered.&lt;br /&gt;
* In the &#039;&#039;&#039;Class&#039;&#039;&#039; field, the syslog message class for the syslog entries sent is entered. The class is a numeric value between 0 and 7, it will be used as &#039;&#039;Facility&#039;&#039; (0 =&amp;gt; local0, ... 7 =&amp;gt; local7).  The &#039;&#039;Severity&#039;&#039; field will always be 6 (informational).  See [http://de.wikipedia.org/wiki/Syslog wikipedia.org/wiki/Syslog] for details.&lt;br /&gt;
|-&lt;br /&gt;
|valign=top nowrap=true|&#039;&#039;&#039;HTTP:&#039;&#039;&#039;&lt;br /&gt;
| The syslog entries are transferred to a web server. Each individual syslog entry is transferred to the server as an individual request. &lt;br /&gt;
* In the &#039;&#039;&#039;Address&#039;&#039;&#039; field, the IP-address of remote server is entered.&lt;br /&gt;
* In the &#039;&#039;&#039;Path&#039;&#039;&#039; field, the relative URL to be used in the HTTP request is entered.&lt;br /&gt;
* The Method field selects the method used to send the request. There are 3 formats available:&lt;br /&gt;
{|&lt;br /&gt;
| Format || Request Type || URI  || Description&lt;br /&gt;
|-&lt;br /&gt;
| Standard || POST || &#039;&#039;hardwired&#039;&#039; || This should be used to forward log messages to another innovaphone device, e.g. to store it on a central CF card&lt;br /&gt;
|-&lt;br /&gt;
| External(POST) || POST || as defined in the Path field || This is identical to the &#039;&#039;Standard&#039;&#039; method, except that you may specifiy the URI to be used&lt;br /&gt;
|-&lt;br /&gt;
| External(GET) || GET || as defined in the Path field || The log message will be coded into GET &#039;&#039;form data&#039;&#039; (a.k.a. &#039;&#039;query args&#039;&#039;). This method is compatible to the method used in firmware versions 5.01 and 6.&lt;br /&gt;
|}&lt;br /&gt;
For more information on HTTP request formatting, see [[Reference7:HTTP Request Message Format]].&lt;br /&gt;
&lt;br /&gt;
If the addressed Web server requires authentication, an &#039;&#039;Authenticated URL&#039;&#039; has to be configured on the [[Reference:Configuration/General/HTTP-Client|HTTP-Client]] Page. The &#039;&#039;URL&#039;&#039; constructed by the logger is shown right next to the &#039;&#039;Path&#039;&#039; field. It must be entered in exactly this format on the [[Reference:Configuration/General/HTTP-Client|HTTP-Client]] Page. The device has to be restarted after the &#039;&#039;Authenticated URL&#039;&#039; has been set. &lt;br /&gt;
|-  &lt;br /&gt;
|valign=top nowrap=true|&#039;&#039;&#039;LOCAL:&#039;&#039;&#039;&lt;br /&gt;
| The syslog entries are saved to [[Reference:Administration/Diagnostics/CF|the local CF card]] into the &#039;&#039;&#039;/log&#039;&#039;&#039; directory, e.g. &#039;&#039;&#039;\\&#039;&#039;ipaddr&#039;&#039;\drive\CF0\log&#039;&#039;&#039;.  Log files named &#039;&#039;&#039;LOG0.&#039;&#039;n&#039;&#039;&#039;&#039;&#039; are created, where &#039;&#039;&#039;&#039;&#039;n&#039;&#039;&#039;&#039;&#039; goes from 0 to 3. The next log file is created when either the &#039;&#039;&#039;Max File Size&#039;&#039;&#039; is reached or the &#039;&#039;&#039;Backup Time&#039;&#039;&#039; has passed.  &#039;&#039;&#039;LOG0.0&#039;&#039;&#039; is the newest log file always.&lt;br /&gt;
&lt;br /&gt;
To concentrate all syslog messages to a single CF card, you would use the &#039;&#039;&#039;HTTP Log Server Type&#039;&#039;&#039; in all but one boxes with &#039;&#039;&#039;Method&#039;&#039;&#039; set to &#039;&#039;&#039;Standard&#039;&#039;&#039;.  &#039;&#039;&#039;Address&#039;&#039;&#039; must be set to the IP-address of the single box that has the CF card used for log message storage. &#039;&#039;&#039;Port&#039;&#039;&#039; must be set to  the port configured for the [[Reference:Configuration/General/HTTP-Server|HTTP-Server]] of this box.  &lt;br /&gt;
&lt;br /&gt;
|-  &lt;br /&gt;
|valign=top nowrap=true|&#039;&#039;&#039;LOCAL-AP:&#039;&#039;&#039;&lt;br /&gt;
|The logs are transmitted to the local Linux application platform. Logs are stored under \\AP-IP\webdav\log\ and alarms under \\AP-IP\webdav\alarm\&lt;br /&gt;
|-  &lt;br /&gt;
|valign=top nowrap=true|&#039;&#039;&#039;REMOTE-AP:&#039;&#039;&#039;&lt;br /&gt;
|The logs are transmitted to a remote Linux application platform. Store path is the same as under LOCAL-AP.&lt;br /&gt;
* In the Address  field, you enter the IP address of the remote Linux application platform.&lt;br /&gt;
* In the Port field, you specify the port to which the connection is set up.&lt;br /&gt;
Remark: Don&#039;t forget to enable access to \\AP-IP\ap\log.fcgi as [[Reference10:Concept_Linux_Application_Platform#Use_as_Log_or_Alarm_Server | required for use of LinAP as logserver]].&lt;br /&gt;
|-  &lt;br /&gt;
|valign=top nowrap=true|&#039;&#039;&#039;REMOTE-AP-S:&#039;&#039;&#039;&lt;br /&gt;
|Same as REMOTE-AP, just a secure transmission is used.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
A second server may be configured as &#039;&#039;&#039;Log Server Shadow&#039;&#039;&#039; receiving the same records as the first server.&lt;br /&gt;
&lt;br /&gt;
== Alarm and Event Handling ==&lt;br /&gt;
Alarm and event forwarding is configured independently from the handling of log messages.&lt;br /&gt;
&lt;br /&gt;
If no &#039;&#039;&#039;Forward Server&#039;&#039;&#039; is configured in the &#039;&#039;&#039;Alarm and Event Forward Server&#039;&#039;&#039; area, alarms and events are stored locally as specified in the &#039;&#039;&#039;Local Alarm and Event Queues&#039;&#039;&#039; area below.  Otherwise, alarms and events are additionally forwarded to the external server using HTTP requests. Each individual alarm or event entry is transferred to the server as an individual request.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;SYSLOG&amp;lt;/code&amp;gt; option is only available on Gateway devices. Phones should use HTTP to forward alarm/events to an innovaphone gateway which may forward the collected events to a syslog server. &lt;br /&gt;
&lt;br /&gt;
* The &#039;&#039;&#039;Address&#039;&#039;&#039; is used to set the IP-address of an external HTTP server that will receive the forwarded alarms and events.&lt;br /&gt;
* The &#039;&#039;&#039;Port&#039;&#039;&#039; defines the TCP port the HTTP request is sent to.&lt;br /&gt;
* The &#039;&#039;&#039;Method&#039;&#039;&#039; selects the method used to send the the requests. The same methods as for the &#039;&#039;&#039;Log Server&#039;&#039;&#039; are available here. (only on gateways)&lt;br /&gt;
&lt;br /&gt;
To collect all alarms and events in a single device card, you would use the &#039;&#039;&#039;Standard Method&#039;&#039;&#039; in all but one boxes. &#039;&#039;&#039;Address&#039;&#039;&#039; must be set to the IP-address of the central box. &#039;&#039;&#039;Port&#039;&#039;&#039; must be set to the port configured for the [[{{NAMESPACE}}:Configuration/General/HTTP-Server|HTTP-Server]] of this box.&amp;lt;br/&amp;gt;&lt;br /&gt;
The collected alarms and events may further be forwarded to one or two SYSLOG server(s) as XML-encoded records. &lt;br /&gt;
This is achieved by configuring a &#039;&#039;&#039;Forward Server&#039;&#039;&#039; with &#039;&#039;&#039;Method&#039;&#039;&#039; SYSLOG, the server address under &#039;&#039;&#039;Address&#039;&#039;&#039; and the SYSLOG-Class under &#039;&#039;&#039;Class&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;Local Alarm and Event Queues&#039;&#039;&#039; area allows you to control the number of events and alarms that are kept in memory and stored in non-volatile memory during restarts.&lt;br /&gt;
&lt;br /&gt;
== Alarms and Errors as Email ==&lt;br /&gt;
Definition of email target to send alarms and errors as email to.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Sender Address&#039;&#039;&#039;: email adress of sender&lt;br /&gt;
* &#039;&#039;&#039;Senders&#039; Name&#039;&#039;&#039;: alias of sender name&lt;br /&gt;
* &#039;&#039;&#039;Recipient Address&#039;&#039;&#039;: email adress of recipient&lt;br /&gt;
* &#039;&#039;&#039;Recipients&#039; Name&#039;&#039;&#039;: alias of recipient name&lt;br /&gt;
* &#039;&#039;&#039;Email Server Address&#039;&#039;&#039;: ip-adress or DNS name of smtp email server. TLS will be supported automatically, if demanded by the server. &lt;br /&gt;
* &#039;&#039;&#039;User&#039;&#039;&#039;: user account at email server&lt;br /&gt;
* &#039;&#039;&#039;Password&#039;&#039;&#039;: user password at email server&lt;br /&gt;
* &#039;&#039;&#039;OAuth2&#039;&#039;&#039;: Alternatively OAuth2 credentials to authenticate for e-mail sending. See [[Howto16r1:Configure_OAuth2_E-Mail]].&lt;br /&gt;
&lt;br /&gt;
== Handling of incoming Alarms/Events ==&lt;br /&gt;
{|&lt;br /&gt;
|valign=top nowrap=true|&#039;&#039;&#039;Authenticate:&#039;&#039;&#039;&lt;br /&gt;
| When enabled request HTTP Authentication for the incoming HTTP Alarms/Events messages. You must configure in the sender the HTTP credentials to be able to deliver the Alarms/Events. &lt;br /&gt;
|-&lt;br /&gt;
{|&lt;br /&gt;
== Local Alarm and Event Queues ==&lt;br /&gt;
{|&lt;br /&gt;
|valign=top nowrap=true|&#039;&#039;&#039;Memory Queue Entries:&#039;&#039;&#039;&lt;br /&gt;
| Maximum number of faults and alarms to hold in volatile memory (DRAM)(Default:100).&lt;br /&gt;
|-&lt;br /&gt;
|valign=top nowrap=true|&#039;&#039;&#039;Persistent Queue Entries:&#039;&#039;&#039;&lt;br /&gt;
| Maximum number of faults and alarms to keep in flash memory (Default:50).&lt;br /&gt;
|-&lt;br /&gt;
{|&lt;br /&gt;
&lt;br /&gt;
== Catch trace on Event ==&lt;br /&gt;
&lt;br /&gt;
Event codes (up to 4 different) may be configured, on which the tracing is stopped. The event codes can be copied from actual events displayed on Maintenance/Events. Hexadecimal values was converted and stored as Decimal values.&lt;br /&gt;
&lt;br /&gt;
After the event has happend the trace was stopped, the trace can be read which hopefully contains what caused the event.&lt;br /&gt;
&lt;br /&gt;
You can restart the logfile by emptying the [[{{NAMESPACE}}:Maintenance/Diagnostics/Tracing |buffer]].&lt;/div&gt;</summary>
		<author><name>Tmo</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Howto16r1:Configure_OAuth2_E-Mail&amp;diff=78168</id>
		<title>Howto16r1:Configure OAuth2 E-Mail</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Howto16r1:Configure_OAuth2_E-Mail&amp;diff=78168"/>
		<updated>2025-10-06T11:28:27Z</updated>

		<summary type="html">&lt;p&gt;Tmo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{FIXME|reason=This product is in the beta phase and is not yet finished}}&lt;br /&gt;
&lt;br /&gt;
innovaphone PBX and apps can be configured to send E-Mails for various subjects and purposes. Major E-Mail providers intent to discontinue the username/password authentication schemes in favour of OAuth2. PBX and Apps version 16r1 does support OAuth2 authentication for SMTP. Here is a step by step guide how to set up OAuth2 support in Microsoft 365 through the Azure Portal and how to set it up on a Google Gmail account in the Google Cloud Console.&lt;br /&gt;
&lt;br /&gt;
== Microsoft 365 ==&lt;br /&gt;
Log in to Microsoft Azure Portal (&amp;lt;nowiki&amp;gt;https://portal.azure.com&amp;lt;/nowiki&amp;gt;) and go to Microsoft Entra ID.&lt;br /&gt;
[[File:AzureMicrosoftEntraID.png|none|thumb|600x600px|/AzureMicrosoftEntraID.png|/AzureMicrosoftEntraID.png]]&lt;br /&gt;
Add a new app registration to create client credentials.&lt;br /&gt;
[[File:AzureAddAppRegistration.png|none|thumb|600x600px|/AzureAddAppRegistration.png|/AzureAddAppRegistration.png]]&lt;br /&gt;
Register the application and maybe already fill in the redirect URI for Web based application type to path OAUTH2-CLIENT/auth.htm at the PBX.&lt;br /&gt;
[[File:AzureRegisterAnApplication.png|none|thumb|600x600px|/AzureRegisterAnApplication.png|/AzureRegisterAnApplication.png]]&lt;br /&gt;
App registration is complete. Client ID and tenant needs to be configured at the PBX and every app that will be sending e-mails.&lt;br /&gt;
[[File:AzureApp.png|none|thumb|600x600px|/AzureApp.png|/AzureApp.png]]&lt;br /&gt;
Create a client secret. Note that expiry is limited to no longer than 2 years. The client secret must be renewed before expiry and the new secret configured and interactive authorisation carried out again to ensure continuous operation.&lt;br /&gt;
[[File:AzureAddClientSecret.png|none|thumb|600x600px|/AzureAddClientSecret.png|/AzureAddClientSecret.png]]&lt;br /&gt;
Copy the client secret. It also needs to be configured at the PBX and every app that will be sending e-mails.&lt;br /&gt;
[[File:AzureCopyClientSecret.png|none|thumb|600x600px|/AzureCopyClientSecret.png|/AzureCopyClientSecret.png]]&lt;br /&gt;
Add permissions located in APIs my organization uses.&lt;br /&gt;
[[File:AzureAddApiPermissionMyOrganization.png|none|thumb|600x600px|/AzureAddApiPermissionMyOrganization.png|/AzureAddApiPermissionMyOrganization.png]]&lt;br /&gt;
More precisely located in Office 365 Exchange Online.&lt;br /&gt;
[[File:AzureAddApiPermissionExchange.png|none|thumb|600x600px|/AzureAddApiPermissionExchange.png|/AzureAddApiPermissionExchange.png]]&lt;br /&gt;
And there in the application permissions.&lt;br /&gt;
[[File:AzureAddApiExchangeApplication.png|none|thumb|600x600px|/AzureAddApiExchangeApplication.png|/AzureAddApiExchangeApplication.png]]&lt;br /&gt;
Namely SMTP Mail.Send.&lt;br /&gt;
[[File:AzureAddApiSendMailAsUser.png|none|thumb|600x600px|/AzureAddApiSendMailAsUser.png|/AzureAddApiSendMailAsUser.png]]&lt;br /&gt;
Grant admin permission for Mail.Send.&lt;br /&gt;
[[File:AzureGrantApiPermissions.png|none|thumb|600x600px|/AzureGrantApiPermissions.png|/AzureGrantApiPermissions.png]]&lt;br /&gt;
API permissions are now granted.&lt;br /&gt;
[[File:AzureApiPermissionsGranted.png|none|thumb|600x600px|/AzureApiPermissionsGranted.png|/AzureApiPermissionsGranted.png]]&lt;br /&gt;
Tell all redirect URIs that the PBX and the apps will be using during interactive authorization.&lt;br /&gt;
[[File:AzureRedirectUris.png|none|thumb|600x600px|/AzureRedirectUris.png|/AzureRedirectUris.png]]&lt;br /&gt;
Allow public client flows of OAuth2. Resource Owner Password Credentials Flow has the advantage that it doesn&#039;t need interactive authorization.&lt;br /&gt;
[[File:AzureAllowPublicClientFlows.png|none|thumb|600x600px|/AzureAllowPublicClientFlows.png|/AzureAllowPublicClientFlows.png]]&lt;br /&gt;
Log in to the Microsoft 365 admin center (https://admin.cloud.microsoft).&lt;br /&gt;
[[File:MS365AdminCenter.png|none|thumb|600x600px|/MS365AdminCenter.png|/MS365AdminCenter.png]]&lt;br /&gt;
Make sure that Microsoft 365 licenses are assigned to your user.&lt;br /&gt;
[[File:MS365UserLicenses.png|none|thumb|600x600px|/MS365UserLicenses.png|/MS365UserLicenses.png]]&lt;br /&gt;
Set your user active.&lt;br /&gt;
[[File:MS365ActiveUsers.png|none|thumb|600x600px|/MS365ActiveUsers.png|/MS365ActiveUsers.png]]&lt;br /&gt;
Locate the Mail tab of your user.&lt;br /&gt;
[[File:MS365UserEMail.png|none|thumb|600x600px|/MS365UserEMail.png|/MS365UserEMail.png]]&lt;br /&gt;
Allow authenticated SMTP.&lt;br /&gt;
[[File:MS365AuthenticatedSMTP.png|none|thumb|600x600px|/MS365AuthenticatedSMTP.png|/MS365AuthenticatedSMTP.png]]&lt;br /&gt;
Login to the Exchange admin center (&amp;lt;nowiki&amp;gt;https://admin.exchange.microsoft.com&amp;lt;/nowiki&amp;gt;).&lt;br /&gt;
[[File:ExchangeAdminCenter.png|none|thumb|600x600px|/ExchangeAdminCenter.png|/ExchangeAdminCenter.png]]&lt;br /&gt;
Remove deactivation of the SMTP AUTH protocol.&lt;br /&gt;
[[File:ExchangeRemoveDeavtivatedOAuth2.png|none|thumb|600x600px|/ExchangeRemoveDeavtivatedOAuth2.png|/ExchangeRemoveDeavtivatedOAuth2.png]]&lt;br /&gt;
With this Microsoft setup the OAuth2 configuration for the resource owner password credentials flow can be filled in as follows. &lt;br /&gt;
[[File:OAuth2ResourceOwnerPasswordCredentials.png|none|thumb|600x600px|/OAuth2ResourceOwnerPasswordCredentials.png|/OAuth2ResourceOwnerPasswordCredentials.png]]&lt;br /&gt;
For interactive authorization this is the OAuth2 configuration. Authorize e-mail access one time and send a test mail to verify everything went well.&lt;br /&gt;
[[File:OAuth2InteractiveAuthorization.png|none|thumb|600x600px|/OAuth2InteractiveAuthorization.png|/OAuth2InteractiveAuthorization.png]]&lt;br /&gt;
&lt;br /&gt;
== Gmail ==&lt;br /&gt;
Login to the Google Cloud Console (https://console.cloud.google.com), select a project, New project.&lt;br /&gt;
[[File:GoogleSelectProject.png|none|thumb|600x600px|/GoogleSelectProject.png|/GoogleSelectProject.png]]&lt;br /&gt;
Create the project.&lt;br /&gt;
[[File:GoogleCreateProject.png|none|thumb|600x600px|/GoogleCreateProject.png|/GoogleCreateProject.png]]&lt;br /&gt;
Client credentials will be created in this project.&lt;br /&gt;
[[File:GoogleProjectCreated.png|none|thumb|600x600px|/GoogleProjectCreated.png|/GoogleProjectCreated.png]]&lt;br /&gt;
From the library specify the APIs needed to access.&lt;br /&gt;
[[File:GoogleApisServicesFromLibrary.png|none|thumb|600x600px|/GoogleApisServicesFromLibrary.png|/GoogleApisServicesFromLibrary.png]]&lt;br /&gt;
These are in the Gmail API.&lt;br /&gt;
[[File:GoogleApisServicesApiLibrary.png|none|thumb|600x600px|/GoogleApisServicesApiLibrary.png|/GoogleApisServicesApiLibrary.png]]&lt;br /&gt;
Choose the Gmail API and enable it.&lt;br /&gt;
[[File:GoogleGmailApis.png|none|thumb|600x600px|/GoogleGmailApis.png|/GoogleGmailApis.png]]&lt;br /&gt;
Credentials need to be created.&lt;br /&gt;
[[File:GoogleGmailApiAdded.png|none|thumb|600x600px|/GoogleGmailApiAdded.png|/GoogleGmailApiAdded.png]]&lt;br /&gt;
Invoke the help me choose wizard.&lt;br /&gt;
[[File:GoogleCreateCredentialsHelpMeChoose.png|none|thumb|600x600px|/GoogleCreateCredentialsHelpMeChoose.png|/GoogleCreateCredentialsHelpMeChoose.png]]&lt;br /&gt;
User data access is needed.&lt;br /&gt;
[[File:GoogleCredentialsUserData.png|none|thumb|600x600px|/GoogleCredentialsUserData.png|/GoogleCredentialsUserData.png]]&lt;br /&gt;
Configure the consent screen of the interactive authorization.&lt;br /&gt;
[[File:GoogleOAuthConsentScreen.png|none|thumb|600x600px|/GoogleOAuthConsentScreen.png|/GoogleOAuthConsentScreen.png]]&lt;br /&gt;
Specify the permissions that need to be authorized by the user.&lt;br /&gt;
[[File:GoogleOAuthScopes.png|none|thumb|600x600px|/GoogleOAuthScopes.png|/GoogleOAuthScopes.png]]&lt;br /&gt;
Its mail.google.com in general.&lt;br /&gt;
[[File:GoogleScopeMailGoogleCom.png|none|thumb|600x600px|/GoogleScopeMailGoogleCom.png|/GoogleScopeMailGoogleCom.png]]&lt;br /&gt;
And its to send email on the users behalf.&lt;br /&gt;
[[File:GoogleScopeAuthGmailSend.png|none|thumb|600x600px|/GoogleScopeAuthGmailSend.png|/GoogleScopeAuthGmailSend.png]]&lt;br /&gt;
These are the scopes needed.&lt;br /&gt;
[[File:GoogleScopes.png|none|thumb|600x600px|/GoogleScopes.png|/GoogleScopes.png]]&lt;br /&gt;
Ask client credentials for Web type application.&lt;br /&gt;
[[File:GoogleOAuthClientID.png|none|thumb|600x600px|/GoogleOAuthClientID.png|/GoogleOAuthClientID.png]]&lt;br /&gt;
Tell all redirect URIs that the PBX and the apps will be using during interactive authorization.&lt;br /&gt;
[[File:GoogleRedirectURIs.png|none|thumb|600x600px|/GoogleRedirectURIs.png|/GoogleRedirectURIs.png]]&lt;br /&gt;
Download the credentials. This json file contains all information for OAuth2 configuration.&lt;br /&gt;
[[File:GoogleClientCredentialsDownload.png|none|thumb|600x600px|/GoogleClientCredentialsDownload.png|/GoogleClientCredentialsDownload.png]]&lt;br /&gt;
Customize the OAuth consent screen&lt;br /&gt;
[[File:GoogleOAuthConsentScreenSettings.png|none|thumb|600x600px|/GoogleOAuthConsentScreenSettings.png|/GoogleOAuthConsentScreenSettings.png]]&lt;br /&gt;
Start the customization wizard.&lt;br /&gt;
[[File:GoogleConsentScreenWizard.png|none|thumb|600x600px|/GoogleConsentScreenWizard.png|/GoogleConsentScreenWizard.png]]&lt;br /&gt;
Choose which users may authorize.&lt;br /&gt;
[[File:GoogleAudienceExternal.png|none|thumb|600x600px|/GoogleAudienceExternal.png|/GoogleAudienceExternal.png]]&lt;br /&gt;
Google workspace users may choose internal audience. Users not in Google workspace proceed with external.&lt;br /&gt;
[[File:GoogleContactInformation.png|none|thumb|600x600px|/GoogleContactInformation.png|/GoogleContactInformation.png]]&lt;br /&gt;
Add a test user.&lt;br /&gt;
[[File:GoogleTestUserAdded.png|none|thumb|600x600px|/GoogleTestUserAdded.png|/GoogleTestUserAdded.png]]&lt;br /&gt;
The OAuth2 parameters can be filled in with the information from the json file downloaded above. Authorize e-mail access one time and send a test mail to verify everything went well.&lt;br /&gt;
[[File:OAuth2InteractiveGmail.png|none|thumb|600x600px|/OAuth2InteractiveGmail.png|/OAuth2InteractiveGmail.png]]&lt;br /&gt;
&lt;br /&gt;
== Generic ==&lt;br /&gt;
&lt;br /&gt;
For other e-mail providers the client secret post OAuth2 flow may be configured in a generic way. Details need to be supplied by the e-mail provider.&lt;br /&gt;
&lt;br /&gt;
For the Microsoft 365 setup above it would be as follows with Token endpoint &#039;&#039;&amp;lt;nowiki&amp;gt;https://login.microsoftonline.com/af326a34-169c-469e-946b-1ef57925306b/oauth2/v2.0/token&amp;lt;/nowiki&amp;gt;&#039;&#039; Authorization URL &#039;&#039;&amp;lt;nowiki&amp;gt;https://login.microsoftonline.com/af326a34-169c-469e-946b-1ef57925306b/oauth2/v2.0/authorize?scope=https://outlook.office.com/SMTP.Send&amp;lt;/nowiki&amp;gt; offline_access&#039;&#039; The configuration appends &#039;&#039;&amp;amp;response_type=code&amp;amp;prompt=consent&amp;amp;login_hint=...&amp;amp;redirect_uri=...&amp;amp;client_id=...&#039;&#039; automatically.[[File:OAuth2ClientSecretPost.png|none|thumb|600x600px|/OAuth2ClientSecretPost.png|/OAuth2ClientSecretPost.png]]&lt;br /&gt;
For the Gmail example above the generic confguration would be like this with Token endpoint &#039;&#039;&amp;lt;nowiki&amp;gt;https://oauth2.googleapis.com/token&amp;lt;/nowiki&amp;gt;&#039;&#039; Authorization URL &#039;&#039;&amp;lt;nowiki&amp;gt;https://accounts.google.com/o/oauth2/auth?access_type=offline&amp;amp;scope=https://mail.google.com/&amp;lt;/nowiki&amp;gt;&#039;&#039; The configuration appends &#039;&#039;&amp;amp;response_type=code&amp;amp;prompt=consent&amp;amp;login_hint=...&amp;amp;redirect_uri=...&amp;amp;client_id=...&#039;&#039; automatically.&lt;br /&gt;
[[File:OAith2ClientSecretPostGmail.png|none|thumb|600x600px|/OAith2ClientSecretPostGmail.png]]&lt;br /&gt;
The private key jwt OAuth2 flow can be configured generically as well.[[File:OAuth2PrivateKeyJWT.png|none|thumb|600x600px|/OAuth2PrivateKeyJWT.png|/OAuth2PrivateKeyJWT.png]]&lt;/div&gt;</summary>
		<author><name>Tmo</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Howto16r1:Configure_OAuth2_E-Mail&amp;diff=78158</id>
		<title>Howto16r1:Configure OAuth2 E-Mail</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Howto16r1:Configure_OAuth2_E-Mail&amp;diff=78158"/>
		<updated>2025-10-05T08:08:43Z</updated>

		<summary type="html">&lt;p&gt;Tmo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{FIXME|reason=This product is in the beta phase and is not yet finished}}&lt;br /&gt;
&lt;br /&gt;
innovaphone PBX and apps can be configured to send E-Mails for various subjects and purposes. Major E-Mail providers intent to discontinue the username/password authentication schemes in favour of OAuth2. PBX and Apps version 16r1 does support OAuth2 authentication for SMTP. Here is a step by step guide how to set up OAuth2 support in Microsoft 365 through the Azure Portal and how to set it up on a Google Gmail account in the Google Cloud Console.&lt;br /&gt;
&lt;br /&gt;
== Microsoft 365 ==&lt;br /&gt;
Log in to Microsoft Azure Portal (&amp;lt;nowiki&amp;gt;https://portal.azure.com&amp;lt;/nowiki&amp;gt;) and go to Microsoft Entra ID.&lt;br /&gt;
[[File:AzureMicrosoftEntraID.png|none|thumb|600x600px|/AzureMicrosoftEntraID.png|/AzureMicrosoftEntraID.png]]&lt;br /&gt;
Add a new app registration to create client credentials.&lt;br /&gt;
[[File:AzureAddAppRegistration.png|none|thumb|600x600px|/AzureAddAppRegistration.png|/AzureAddAppRegistration.png]]&lt;br /&gt;
Register the application and maybe already fill in the redirect URI for Web based application type to path OAUTH2-CLIENT/auth.htm at the PBX.&lt;br /&gt;
[[File:AzureRegisterAnApplication.png|none|thumb|600x600px|/AzureRegisterAnApplication.png|/AzureRegisterAnApplication.png]]&lt;br /&gt;
App registration is complete. Client ID and tenant needs to be configured at the PBX and every app that will be sending e-mails.&lt;br /&gt;
[[File:AzureApp.png|none|thumb|600x600px|/AzureApp.png|/AzureApp.png]]&lt;br /&gt;
Create a client secret.&lt;br /&gt;
[[File:AzureAddClientSecret.png|none|thumb|600x600px|/AzureAddClientSecret.png|/AzureAddClientSecret.png]]&lt;br /&gt;
Copy the client secret. It also needs to be configured at the PBX and every app that will be sending e-mails.&lt;br /&gt;
[[File:AzureCopyClientSecret.png|none|thumb|600x600px|/AzureCopyClientSecret.png|/AzureCopyClientSecret.png]]&lt;br /&gt;
Add permissions located in APIs my organization uses.&lt;br /&gt;
[[File:AzureAddApiPermissionMyOrganization.png|none|thumb|600x600px|/AzureAddApiPermissionMyOrganization.png|/AzureAddApiPermissionMyOrganization.png]]&lt;br /&gt;
More precisely located in Office 365 Exchange Online.&lt;br /&gt;
[[File:AzureAddApiPermissionExchange.png|none|thumb|600x600px|/AzureAddApiPermissionExchange.png|/AzureAddApiPermissionExchange.png]]&lt;br /&gt;
And there in the application permissions.&lt;br /&gt;
[[File:AzureAddApiExchangeApplication.png|none|thumb|600x600px|/AzureAddApiExchangeApplication.png|/AzureAddApiExchangeApplication.png]]&lt;br /&gt;
Namely SMTP Mail.Send.&lt;br /&gt;
[[File:AzureAddApiSendMailAsUser.png|none|thumb|600x600px|/AzureAddApiSendMailAsUser.png|/AzureAddApiSendMailAsUser.png]]&lt;br /&gt;
Grant admin permission for Mail.Send.&lt;br /&gt;
[[File:AzureGrantApiPermissions.png|none|thumb|600x600px|/AzureGrantApiPermissions.png|/AzureGrantApiPermissions.png]]&lt;br /&gt;
API permissions are now granted.&lt;br /&gt;
[[File:AzureApiPermissionsGranted.png|none|thumb|600x600px|/AzureApiPermissionsGranted.png|/AzureApiPermissionsGranted.png]]&lt;br /&gt;
Tell all redirect URIs that the PBX and the apps will be using during interactive authorization.&lt;br /&gt;
[[File:AzureRedirectUris.png|none|thumb|600x600px|/AzureRedirectUris.png|/AzureRedirectUris.png]]&lt;br /&gt;
Allow public client flows of OAuth2. Resource Owner Password Credentials Flow has the advantage that it doesn&#039;t need interactive authorization.&lt;br /&gt;
[[File:AzureAllowPublicClientFlows.png|none|thumb|600x600px|/AzureAllowPublicClientFlows.png|/AzureAllowPublicClientFlows.png]]&lt;br /&gt;
Log in to the Microsoft 365 admin center (https://admin.cloud.microsoft).&lt;br /&gt;
[[File:MS365AdminCenter.png|none|thumb|600x600px|/MS365AdminCenter.png|/MS365AdminCenter.png]]&lt;br /&gt;
Make sure that Microsoft 365 licenses are assigned to your user.&lt;br /&gt;
[[File:MS365UserLicenses.png|none|thumb|600x600px|/MS365UserLicenses.png|/MS365UserLicenses.png]]&lt;br /&gt;
Set your user active.&lt;br /&gt;
[[File:MS365ActiveUsers.png|none|thumb|600x600px|/MS365ActiveUsers.png|/MS365ActiveUsers.png]]&lt;br /&gt;
Locate the Mail tab of your user.&lt;br /&gt;
[[File:MS365UserEMail.png|none|thumb|600x600px|/MS365UserEMail.png|/MS365UserEMail.png]]&lt;br /&gt;
Allow authenticated SMTP.&lt;br /&gt;
[[File:MS365AuthenticatedSMTP.png|none|thumb|600x600px|/MS365AuthenticatedSMTP.png|/MS365AuthenticatedSMTP.png]]&lt;br /&gt;
Login to the Exchange admin center (&amp;lt;nowiki&amp;gt;https://admin.exchange.microsoft.com&amp;lt;/nowiki&amp;gt;).&lt;br /&gt;
[[File:ExchangeAdminCenter.png|none|thumb|600x600px|/ExchangeAdminCenter.png|/ExchangeAdminCenter.png]]&lt;br /&gt;
Remove deactivation of the SMTP AUTH protocol.&lt;br /&gt;
[[File:ExchangeRemoveDeavtivatedOAuth2.png|none|thumb|600x600px|/ExchangeRemoveDeavtivatedOAuth2.png|/ExchangeRemoveDeavtivatedOAuth2.png]]&lt;br /&gt;
With this Microsoft setup the OAuth2 configuration for the resource owner password credentials flow can be filled in as follows. &lt;br /&gt;
[[File:OAuth2ResourceOwnerPasswordCredentials.png|none|thumb|600x600px|/OAuth2ResourceOwnerPasswordCredentials.png|/OAuth2ResourceOwnerPasswordCredentials.png]]&lt;br /&gt;
For interactive authorization this is the OAuth2 configuration. Authorize e-mail access one time and send a test mail to verify everything went well.&lt;br /&gt;
[[File:OAuth2InteractiveAuthorization.png|none|thumb|600x600px|/OAuth2InteractiveAuthorization.png|/OAuth2InteractiveAuthorization.png]]&lt;br /&gt;
&lt;br /&gt;
== Gmail ==&lt;br /&gt;
Login to the Google Cloud Console (https://console.cloud.google.com), select a project, New project.&lt;br /&gt;
[[File:GoogleSelectProject.png|none|thumb|600x600px|/GoogleSelectProject.png|/GoogleSelectProject.png]]&lt;br /&gt;
Create the project.&lt;br /&gt;
[[File:GoogleCreateProject.png|none|thumb|600x600px|/GoogleCreateProject.png|/GoogleCreateProject.png]]&lt;br /&gt;
Client credentials will be created in this project.&lt;br /&gt;
[[File:GoogleProjectCreated.png|none|thumb|600x600px|/GoogleProjectCreated.png|/GoogleProjectCreated.png]]&lt;br /&gt;
From the library specify the APIs needed to access.&lt;br /&gt;
[[File:GoogleApisServicesFromLibrary.png|none|thumb|600x600px|/GoogleApisServicesFromLibrary.png|/GoogleApisServicesFromLibrary.png]]&lt;br /&gt;
These are in the Gmail API.&lt;br /&gt;
[[File:GoogleApisServicesApiLibrary.png|none|thumb|600x600px|/GoogleApisServicesApiLibrary.png|/GoogleApisServicesApiLibrary.png]]&lt;br /&gt;
Choose the Gmail API and enable it.&lt;br /&gt;
[[File:GoogleGmailApis.png|none|thumb|600x600px|/GoogleGmailApis.png|/GoogleGmailApis.png]]&lt;br /&gt;
Credentials need to be created.&lt;br /&gt;
[[File:GoogleGmailApiAdded.png|none|thumb|600x600px|/GoogleGmailApiAdded.png|/GoogleGmailApiAdded.png]]&lt;br /&gt;
Invoke the help me choose wizard.&lt;br /&gt;
[[File:GoogleCreateCredentialsHelpMeChoose.png|none|thumb|600x600px|/GoogleCreateCredentialsHelpMeChoose.png|/GoogleCreateCredentialsHelpMeChoose.png]]&lt;br /&gt;
User data access is needed.&lt;br /&gt;
[[File:GoogleCredentialsUserData.png|none|thumb|600x600px|/GoogleCredentialsUserData.png|/GoogleCredentialsUserData.png]]&lt;br /&gt;
Configure the consent screen of the interactive authorization.&lt;br /&gt;
[[File:GoogleOAuthConsentScreen.png|none|thumb|600x600px|/GoogleOAuthConsentScreen.png|/GoogleOAuthConsentScreen.png]]&lt;br /&gt;
Specify the permissions that need to be authorized by the user.&lt;br /&gt;
[[File:GoogleOAuthScopes.png|none|thumb|600x600px|/GoogleOAuthScopes.png|/GoogleOAuthScopes.png]]&lt;br /&gt;
Its mail.google.com in general.&lt;br /&gt;
[[File:GoogleScopeMailGoogleCom.png|none|thumb|600x600px|/GoogleScopeMailGoogleCom.png|/GoogleScopeMailGoogleCom.png]]&lt;br /&gt;
And its to send email on the users behalf.&lt;br /&gt;
[[File:GoogleScopeAuthGmailSend.png|none|thumb|600x600px|/GoogleScopeAuthGmailSend.png|/GoogleScopeAuthGmailSend.png]]&lt;br /&gt;
These are the scopes needed.&lt;br /&gt;
[[File:GoogleScopes.png|none|thumb|600x600px|/GoogleScopes.png|/GoogleScopes.png]]&lt;br /&gt;
Ask client credentials for Web type application.&lt;br /&gt;
[[File:GoogleOAuthClientID.png|none|thumb|600x600px|/GoogleOAuthClientID.png|/GoogleOAuthClientID.png]]&lt;br /&gt;
Tell all redirect URIs that the PBX and the apps will be using during interactive authorization.&lt;br /&gt;
[[File:GoogleRedirectURIs.png|none|thumb|600x600px|/GoogleRedirectURIs.png|/GoogleRedirectURIs.png]]&lt;br /&gt;
Download the credentials. This json file contains all information for OAuth2 configuration.&lt;br /&gt;
[[File:GoogleClientCredentialsDownload.png|none|thumb|600x600px|/GoogleClientCredentialsDownload.png|/GoogleClientCredentialsDownload.png]]&lt;br /&gt;
Customize the OAuth consent screen&lt;br /&gt;
[[File:GoogleOAuthConsentScreenSettings.png|none|thumb|600x600px|/GoogleOAuthConsentScreenSettings.png|/GoogleOAuthConsentScreenSettings.png]]&lt;br /&gt;
Start the customization wizard.&lt;br /&gt;
[[File:GoogleConsentScreenWizard.png|none|thumb|600x600px|/GoogleConsentScreenWizard.png|/GoogleConsentScreenWizard.png]]&lt;br /&gt;
Choose which users may authorize.&lt;br /&gt;
[[File:GoogleAudienceExternal.png|none|thumb|600x600px|/GoogleAudienceExternal.png|/GoogleAudienceExternal.png]]&lt;br /&gt;
Google workspace users may choose internal audience. Users not in Google workspace proceed with external.&lt;br /&gt;
[[File:GoogleContactInformation.png|none|thumb|600x600px|/GoogleContactInformation.png|/GoogleContactInformation.png]]&lt;br /&gt;
Add a test user.&lt;br /&gt;
[[File:GoogleTestUserAdded.png|none|thumb|600x600px|/GoogleTestUserAdded.png|/GoogleTestUserAdded.png]]&lt;br /&gt;
The OAuth2 parameters can be filled in with the information from the json file downloaded above. Authorize e-mail access one time and send a test mail to verify everything went well.&lt;br /&gt;
[[File:OAuth2InteractiveGmail.png|none|thumb|600x600px|/OAuth2InteractiveGmail.png|/OAuth2InteractiveGmail.png]]&lt;br /&gt;
&lt;br /&gt;
== Generic ==&lt;br /&gt;
&lt;br /&gt;
For other e-mail providers the client secret post OAuth2 flow may be configured in a generic way. Details need to be supplied by the e-mail provider.&lt;br /&gt;
&lt;br /&gt;
For the Microsoft 365 setup above it would be as follows with Token endpoint &#039;&#039;&amp;lt;nowiki&amp;gt;https://login.microsoftonline.com/af326a34-169c-469e-946b-1ef57925306b/oauth2/v2.0/token&amp;lt;/nowiki&amp;gt;&#039;&#039; Authorization URL &#039;&#039;&amp;lt;nowiki&amp;gt;https://login.microsoftonline.com/af326a34-169c-469e-946b-1ef57925306b/oauth2/v2.0/authorize?scope=https://outlook.office.com/SMTP.Send&amp;lt;/nowiki&amp;gt; offline_access&#039;&#039; The configuration appends &#039;&#039;&amp;amp;response_type=code&amp;amp;prompt=consent&amp;amp;login_hint=...&amp;amp;redirect_uri=...&amp;amp;client_id=...&#039;&#039; automatically.[[File:OAuth2ClientSecretPost.png|none|thumb|600x600px|/OAuth2ClientSecretPost.png|/OAuth2ClientSecretPost.png]]&lt;br /&gt;
For the Gmail example above the generic confguration would be like this with Token endpoint &#039;&#039;&amp;lt;nowiki&amp;gt;https://oauth2.googleapis.com/token&amp;lt;/nowiki&amp;gt;&#039;&#039; Authorization URL &#039;&#039;&amp;lt;nowiki&amp;gt;https://accounts.google.com/o/oauth2/auth?access_type=offline&amp;amp;scope=https://mail.google.com/&amp;lt;/nowiki&amp;gt;&#039;&#039; The configuration appends &#039;&#039;&amp;amp;response_type=code&amp;amp;prompt=consent&amp;amp;login_hint=...&amp;amp;redirect_uri=...&amp;amp;client_id=...&#039;&#039; automatically.&lt;br /&gt;
[[File:OAith2ClientSecretPostGmail.png|none|thumb|600x600px]]&lt;br /&gt;
The private key jwt OAuth2 flow can be configured generically as well.[[File:OAuth2PrivateKeyJWT.png|none|thumb|600x600px|/OAuth2PrivateKeyJWT.png|/OAuth2PrivateKeyJWT.png]]&lt;/div&gt;</summary>
		<author><name>Tmo</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=File:OAith2ClientSecretPostGmail.png&amp;diff=78157</id>
		<title>File:OAith2ClientSecretPostGmail.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=File:OAith2ClientSecretPostGmail.png&amp;diff=78157"/>
		<updated>2025-10-05T07:50:49Z</updated>

		<summary type="html">&lt;p&gt;Tmo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;OAuth2 Client Secret Post Gmail&lt;/div&gt;</summary>
		<author><name>Tmo</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Howto16r1:Configure_OAuth2_E-Mail&amp;diff=78156</id>
		<title>Howto16r1:Configure OAuth2 E-Mail</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Howto16r1:Configure_OAuth2_E-Mail&amp;diff=78156"/>
		<updated>2025-10-05T06:49:39Z</updated>

		<summary type="html">&lt;p&gt;Tmo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{FIXME|reason=This product is in the beta phase and is not yet finished}}&lt;br /&gt;
&lt;br /&gt;
innovaphone PBX and apps can be configured to send E-Mails for various subjects and purposes. Major E-Mail providers intent to discontinue the username/password authentication schemes in favour of OAuth2. PBX and Apps version 16r1 does support OAuth2 authentication for SMTP. Here is a step by step guide how to set up OAuth2 support in Microsoft 365 through the Azure Portal and how to set it up on a Google Gmail account in the Google Cloud Console.&lt;br /&gt;
&lt;br /&gt;
== Microsoft 365 ==&lt;br /&gt;
Log in to Microsoft Azure Portal (&amp;lt;nowiki&amp;gt;https://portal.azure.com&amp;lt;/nowiki&amp;gt;) and go to Microsoft Entra ID.&lt;br /&gt;
[[File:AzureMicrosoftEntraID.png|none|thumb|600x600px|/AzureMicrosoftEntraID.png|/AzureMicrosoftEntraID.png]]&lt;br /&gt;
Add a new app registration to create client credentials.&lt;br /&gt;
[[File:AzureAddAppRegistration.png|none|thumb|600x600px|/AzureAddAppRegistration.png|/AzureAddAppRegistration.png]]&lt;br /&gt;
Register the application and maybe already fill in the redirect URI for Web based application type to path OAUTH2-CLIENT/auth.htm at the PBX.&lt;br /&gt;
[[File:AzureRegisterAnApplication.png|none|thumb|600x600px|/AzureRegisterAnApplication.png|/AzureRegisterAnApplication.png]]&lt;br /&gt;
App registration is complete. Client ID and tenant needs to be configured at the PBX and every app that will be sending e-mails.&lt;br /&gt;
[[File:AzureApp.png|none|thumb|600x600px|/AzureApp.png|/AzureApp.png]]&lt;br /&gt;
Create a client secret.&lt;br /&gt;
[[File:AzureAddClientSecret.png|none|thumb|600x600px|/AzureAddClientSecret.png|/AzureAddClientSecret.png]]&lt;br /&gt;
Copy the client secret. It also needs to be configured at the PBX and every app that will be sending e-mails.&lt;br /&gt;
[[File:AzureCopyClientSecret.png|none|thumb|600x600px|/AzureCopyClientSecret.png|/AzureCopyClientSecret.png]]&lt;br /&gt;
Add permissions located in APIs my organization uses.&lt;br /&gt;
[[File:AzureAddApiPermissionMyOrganization.png|none|thumb|600x600px|/AzureAddApiPermissionMyOrganization.png|/AzureAddApiPermissionMyOrganization.png]]&lt;br /&gt;
More precisely located in Office 365 Exchange Online.&lt;br /&gt;
[[File:AzureAddApiPermissionExchange.png|none|thumb|600x600px|/AzureAddApiPermissionExchange.png|/AzureAddApiPermissionExchange.png]]&lt;br /&gt;
And there in the application permissions.&lt;br /&gt;
[[File:AzureAddApiExchangeApplication.png|none|thumb|600x600px|/AzureAddApiExchangeApplication.png|/AzureAddApiExchangeApplication.png]]&lt;br /&gt;
Namely SMTP Mail.Send.&lt;br /&gt;
[[File:AzureAddApiSendMailAsUser.png|none|thumb|600x600px|/AzureAddApiSendMailAsUser.png|/AzureAddApiSendMailAsUser.png]]&lt;br /&gt;
Grant admin permission for Mail.Send.&lt;br /&gt;
[[File:AzureGrantApiPermissions.png|none|thumb|600x600px|/AzureGrantApiPermissions.png|/AzureGrantApiPermissions.png]]&lt;br /&gt;
API permissions are now granted.&lt;br /&gt;
[[File:AzureApiPermissionsGranted.png|none|thumb|600x600px|/AzureApiPermissionsGranted.png|/AzureApiPermissionsGranted.png]]&lt;br /&gt;
Tell all redirect URIs that the PBX and the apps will be using during interactive authorization.&lt;br /&gt;
[[File:AzureRedirectUris.png|none|thumb|600x600px|/AzureRedirectUris.png|/AzureRedirectUris.png]]&lt;br /&gt;
Allow public client flows of OAuth2. Resource Owner Password Credentials Flow has the advantage that it doesn&#039;t need interactive authorization.&lt;br /&gt;
[[File:AzureAllowPublicClientFlows.png|none|thumb|600x600px|/AzureAllowPublicClientFlows.png|/AzureAllowPublicClientFlows.png]]&lt;br /&gt;
Log in to the Microsoft 365 admin center (https://admin.cloud.microsoft).&lt;br /&gt;
[[File:MS365AdminCenter.png|none|thumb|600x600px|/MS365AdminCenter.png|/MS365AdminCenter.png]]&lt;br /&gt;
Make sure that Microsoft 365 licenses are assigned to your user.&lt;br /&gt;
[[File:MS365UserLicenses.png|none|thumb|600x600px|/MS365UserLicenses.png|/MS365UserLicenses.png]]&lt;br /&gt;
Set your user active.&lt;br /&gt;
[[File:MS365ActiveUsers.png|none|thumb|600x600px|/MS365ActiveUsers.png|/MS365ActiveUsers.png]]&lt;br /&gt;
Locate the Mail tab of your user.&lt;br /&gt;
[[File:MS365UserEMail.png|none|thumb|600x600px|/MS365UserEMail.png|/MS365UserEMail.png]]&lt;br /&gt;
Allow authenticated SMTP.&lt;br /&gt;
[[File:MS365AuthenticatedSMTP.png|none|thumb|600x600px|/MS365AuthenticatedSMTP.png|/MS365AuthenticatedSMTP.png]]&lt;br /&gt;
Login to the Exchange admin center (&amp;lt;nowiki&amp;gt;https://admin.exchange.microsoft.com&amp;lt;/nowiki&amp;gt;).&lt;br /&gt;
[[File:ExchangeAdminCenter.png|none|thumb|600x600px|/ExchangeAdminCenter.png|/ExchangeAdminCenter.png]]&lt;br /&gt;
Remove deactivation of the SMTP AUTH protocol.&lt;br /&gt;
[[File:ExchangeRemoveDeavtivatedOAuth2.png|none|thumb|600x600px|/ExchangeRemoveDeavtivatedOAuth2.png|/ExchangeRemoveDeavtivatedOAuth2.png]]&lt;br /&gt;
With this Microsoft setup the OAuth2 configuration for the resource owner password credentials flow can be filled in as follows. &lt;br /&gt;
[[File:OAuth2ResourceOwnerPasswordCredentials.png|none|thumb|600x600px|/OAuth2ResourceOwnerPasswordCredentials.png|/OAuth2ResourceOwnerPasswordCredentials.png]]&lt;br /&gt;
For interactive authorization this is the OAuth2 configuration. Authorize e-mail access one time and send a test mail to verify everything went well.&lt;br /&gt;
[[File:OAuth2InteractiveAuthorization.png|none|thumb|600x600px|/OAuth2InteractiveAuthorization.png|/OAuth2InteractiveAuthorization.png]]&lt;br /&gt;
&lt;br /&gt;
== Gmail ==&lt;br /&gt;
Login to the Google Cloud Console (https://console.cloud.google.com), select a project, New project.&lt;br /&gt;
[[File:GoogleSelectProject.png|none|thumb|600x600px|/GoogleSelectProject.png|/GoogleSelectProject.png]]&lt;br /&gt;
Create the project.&lt;br /&gt;
[[File:GoogleCreateProject.png|none|thumb|600x600px|/GoogleCreateProject.png|/GoogleCreateProject.png]]&lt;br /&gt;
Client credentials will be created in this project.&lt;br /&gt;
[[File:GoogleProjectCreated.png|none|thumb|600x600px|/GoogleProjectCreated.png|/GoogleProjectCreated.png]]&lt;br /&gt;
From the library specify the APIs needed to access.&lt;br /&gt;
[[File:GoogleApisServicesFromLibrary.png|none|thumb|600x600px|/GoogleApisServicesFromLibrary.png|/GoogleApisServicesFromLibrary.png]]&lt;br /&gt;
These are in the Gmail API.&lt;br /&gt;
[[File:GoogleApisServicesApiLibrary.png|none|thumb|600x600px|/GoogleApisServicesApiLibrary.png|/GoogleApisServicesApiLibrary.png]]&lt;br /&gt;
Choose the Gmail API and enable it.&lt;br /&gt;
[[File:GoogleGmailApis.png|none|thumb|600x600px|/GoogleGmailApis.png|/GoogleGmailApis.png]]&lt;br /&gt;
Credentials need to be created.&lt;br /&gt;
[[File:GoogleGmailApiAdded.png|none|thumb|600x600px|/GoogleGmailApiAdded.png|/GoogleGmailApiAdded.png]]&lt;br /&gt;
Invoke the help me choose wizard.&lt;br /&gt;
[[File:GoogleCreateCredentialsHelpMeChoose.png|none|thumb|600x600px|/GoogleCreateCredentialsHelpMeChoose.png|/GoogleCreateCredentialsHelpMeChoose.png]]&lt;br /&gt;
User data access is needed.&lt;br /&gt;
[[File:GoogleCredentialsUserData.png|none|thumb|600x600px|/GoogleCredentialsUserData.png|/GoogleCredentialsUserData.png]]&lt;br /&gt;
Configure the consent screen of the interactive authorization.&lt;br /&gt;
[[File:GoogleOAuthConsentScreen.png|none|thumb|600x600px|/GoogleOAuthConsentScreen.png|/GoogleOAuthConsentScreen.png]]&lt;br /&gt;
Specify the permissions that need to be authorized by the user.&lt;br /&gt;
[[File:GoogleOAuthScopes.png|none|thumb|600x600px|/GoogleOAuthScopes.png|/GoogleOAuthScopes.png]]&lt;br /&gt;
Its mail.google.com in general.&lt;br /&gt;
[[File:GoogleScopeMailGoogleCom.png|none|thumb|600x600px|/GoogleScopeMailGoogleCom.png|/GoogleScopeMailGoogleCom.png]]&lt;br /&gt;
And its to send email on the users behalf.&lt;br /&gt;
[[File:GoogleScopeAuthGmailSend.png|none|thumb|600x600px|/GoogleScopeAuthGmailSend.png|/GoogleScopeAuthGmailSend.png]]&lt;br /&gt;
These are the scopes needed.&lt;br /&gt;
[[File:GoogleScopes.png|none|thumb|600x600px|/GoogleScopes.png|/GoogleScopes.png]]&lt;br /&gt;
Ask client credentials for Web type application.&lt;br /&gt;
[[File:GoogleOAuthClientID.png|none|thumb|600x600px|/GoogleOAuthClientID.png|/GoogleOAuthClientID.png]]&lt;br /&gt;
Tell all redirect URIs that the PBX and the apps will be using during interactive authorization.&lt;br /&gt;
[[File:GoogleRedirectURIs.png|none|thumb|600x600px|/GoogleRedirectURIs.png|/GoogleRedirectURIs.png]]&lt;br /&gt;
Download the credentials. This json file contains all information for OAuth2 configuration.&lt;br /&gt;
[[File:GoogleClientCredentialsDownload.png|none|thumb|600x600px|/GoogleClientCredentialsDownload.png|/GoogleClientCredentialsDownload.png]]&lt;br /&gt;
Customize the OAuth consent screen&lt;br /&gt;
[[File:GoogleOAuthConsentScreenSettings.png|none|thumb|600x600px|/GoogleOAuthConsentScreenSettings.png|/GoogleOAuthConsentScreenSettings.png]]&lt;br /&gt;
Start the customization wizard.&lt;br /&gt;
[[File:GoogleConsentScreenWizard.png|none|thumb|600x600px|/GoogleConsentScreenWizard.png|/GoogleConsentScreenWizard.png]]&lt;br /&gt;
Choose which users may authorize.&lt;br /&gt;
[[File:GoogleAudienceExternal.png|none|thumb|600x600px|/GoogleAudienceExternal.png|/GoogleAudienceExternal.png]]&lt;br /&gt;
Google workspace users may choose internal audience. Users not in Google workspace proceed with external.&lt;br /&gt;
[[File:GoogleContactInformation.png|none|thumb|600x600px|/GoogleContactInformation.png|/GoogleContactInformation.png]]&lt;br /&gt;
Add a test user.&lt;br /&gt;
[[File:GoogleTestUserAdded.png|none|thumb|600x600px|/GoogleTestUserAdded.png|/GoogleTestUserAdded.png]]&lt;br /&gt;
The OAuth2 parameters can be filled in with the information from the json file downloaded above. Authorize e-mail access one time and send a test mail to verify everything went well.&lt;br /&gt;
[[File:OAuth2InteractiveGmail.png|none|thumb|600x600px|/OAuth2InteractiveGmail.png|/OAuth2InteractiveGmail.png]]&lt;br /&gt;
&lt;br /&gt;
== Generic ==&lt;br /&gt;
&lt;br /&gt;
For other e-mail providers the client secret post OAuth2 flow may be configured in a generic way. Details need to be supplied by the e-mail provider.&lt;br /&gt;
&lt;br /&gt;
For the Microsoft 365 setup above it would be as follows with&lt;br /&gt;
&lt;br /&gt;
Token endpoint: &#039;&#039;&amp;lt;nowiki&amp;gt;https://login.microsoftonline.com/af326a34-169c-469e-946b-1ef57925306b/oauth2/v2.0/token&amp;lt;/nowiki&amp;gt;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Authorization URL: &#039;&#039;&amp;lt;nowiki&amp;gt;https://login.microsoftonline.com/af326a34-169c-469e-946b-1ef57925306b/oauth2/v2.0/authorize?scope=https://outlook.office.com/SMTP.Send&amp;lt;/nowiki&amp;gt; offline_access&#039;&#039;&lt;br /&gt;
[[File:OAuth2ClientSecretPost.png|none|thumb|600x600px|/OAuth2ClientSecretPost.png|/OAuth2ClientSecretPost.png]]&lt;br /&gt;
For the Gmail example above the generic confguration would be like this with&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The private key jwt OAuth2 flow can be configured generically as well.&lt;br /&gt;
[[File:OAuth2PrivateKeyJWT.png|none|thumb|600x600px|/OAuth2PrivateKeyJWT.png|/OAuth2PrivateKeyJWT.png]]&lt;/div&gt;</summary>
		<author><name>Tmo</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Howto16r1:Configure_OAuth2_E-Mail&amp;diff=78153</id>
		<title>Howto16r1:Configure OAuth2 E-Mail</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Howto16r1:Configure_OAuth2_E-Mail&amp;diff=78153"/>
		<updated>2025-10-03T11:54:39Z</updated>

		<summary type="html">&lt;p&gt;Tmo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{FIXME|reason=This product is in the beta phase and is not yet finished}}&lt;br /&gt;
&lt;br /&gt;
innovaphone PBX and apps can be configured to send E-Mails for various subjects and purposes. Major E-Mail providers intent to discontinue the username/password authentication schemes in favour of OAuth2. PBX and Apps version 16r1 does support OAuth2 authentication for SMTP. Here is a step by step guide how to set up OAuth2 support in Microsoft 365 through the Azure Portal and how to set it up on a Google Gmail account in the Google Cloud Console.&lt;br /&gt;
&lt;br /&gt;
== Microsoft 365 ==&lt;br /&gt;
Log in to Microsoft Azure Portal (&amp;lt;nowiki&amp;gt;https://portal.azure.com&amp;lt;/nowiki&amp;gt;) and go to Microsoft Entra ID.&lt;br /&gt;
[[File:AzureMicrosoftEntraID.png|none|thumb|600x600px|/AzureMicrosoftEntraID.png|/AzureMicrosoftEntraID.png]]&lt;br /&gt;
Add a new app registration to create client credentials.&lt;br /&gt;
[[File:AzureAddAppRegistration.png|none|thumb|600x600px|/AzureAddAppRegistration.png|/AzureAddAppRegistration.png]]&lt;br /&gt;
Register the application and maybe already fill in the redirect URI for Web based application type to path OAUTH2-CLIENT/auth.htm at the PBX.&lt;br /&gt;
[[File:AzureRegisterAnApplication.png|none|thumb|600x600px|/AzureRegisterAnApplication.png|/AzureRegisterAnApplication.png]]&lt;br /&gt;
App registration is complete. Client ID and tenant needs to be configured at the PBX and every app that will be sending e-mails.&lt;br /&gt;
[[File:AzureApp.png|none|thumb|600x600px|/AzureApp.png|/AzureApp.png]]&lt;br /&gt;
Create a client secret.&lt;br /&gt;
[[File:AzureAddClientSecret.png|none|thumb|600x600px|/AzureAddClientSecret.png|/AzureAddClientSecret.png]]&lt;br /&gt;
Copy the client secret. It also needs to be configured at the PBX and every app that will be sending e-mails.&lt;br /&gt;
[[File:AzureCopyClientSecret.png|none|thumb|600x600px|/AzureCopyClientSecret.png|/AzureCopyClientSecret.png]]&lt;br /&gt;
Add permissions located in APIs my organization uses.&lt;br /&gt;
[[File:AzureAddApiPermissionMyOrganization.png|none|thumb|600x600px|/AzureAddApiPermissionMyOrganization.png|/AzureAddApiPermissionMyOrganization.png]]&lt;br /&gt;
More precisely located in Office 365 Exchange Online.&lt;br /&gt;
[[File:AzureAddApiPermissionExchange.png|none|thumb|600x600px|/AzureAddApiPermissionExchange.png|/AzureAddApiPermissionExchange.png]]&lt;br /&gt;
And there in the application permissions.&lt;br /&gt;
[[File:AzureAddApiExchangeApplication.png|none|thumb|600x600px|/AzureAddApiExchangeApplication.png|/AzureAddApiExchangeApplication.png]]&lt;br /&gt;
Namely SMTP Mail.Send.&lt;br /&gt;
[[File:AzureAddApiSendMailAsUser.png|none|thumb|600x600px|/AzureAddApiSendMailAsUser.png|/AzureAddApiSendMailAsUser.png]]&lt;br /&gt;
Grant admin permission for Mail.Send.&lt;br /&gt;
[[File:AzureGrantApiPermissions.png|none|thumb|600x600px|/AzureGrantApiPermissions.png|/AzureGrantApiPermissions.png]]&lt;br /&gt;
API permissions are now granted.&lt;br /&gt;
[[File:AzureApiPermissionsGranted.png|none|thumb|600x600px|/AzureApiPermissionsGranted.png|/AzureApiPermissionsGranted.png]]&lt;br /&gt;
Tell all redirect URIs that the PBX and the apps will be using during interactive authorization.&lt;br /&gt;
[[File:AzureRedirectUris.png|none|thumb|600x600px|/AzureRedirectUris.png|/AzureRedirectUris.png]]&lt;br /&gt;
Allow public client flows of OAuth2. Resource Owner Password Credentials Flow has the advantage that it doesn&#039;t need interactive authorization.&lt;br /&gt;
[[File:AzureAllowPublicClientFlows.png|none|thumb|600x600px|/AzureAllowPublicClientFlows.png|/AzureAllowPublicClientFlows.png]]&lt;br /&gt;
Log in to the Microsoft 365 admin center (https://admin.cloud.microsoft).&lt;br /&gt;
[[File:MS365AdminCenter.png|none|thumb|600x600px|/MS365AdminCenter.png|/MS365AdminCenter.png]]&lt;br /&gt;
Make sure that Microsoft 365 licenses are assigned to your user.&lt;br /&gt;
[[File:MS365UserLicenses.png|none|thumb|600x600px|/MS365UserLicenses.png|/MS365UserLicenses.png]]&lt;br /&gt;
Set your user active.&lt;br /&gt;
[[File:MS365ActiveUsers.png|none|thumb|600x600px|/MS365ActiveUsers.png|/MS365ActiveUsers.png]]&lt;br /&gt;
Locate the Mail tab of your user.&lt;br /&gt;
[[File:MS365UserEMail.png|none|thumb|600x600px|/MS365UserEMail.png|/MS365UserEMail.png]]&lt;br /&gt;
Allow authenticated SMTP.&lt;br /&gt;
[[File:MS365AuthenticatedSMTP.png|none|thumb|600x600px|/MS365AuthenticatedSMTP.png|/MS365AuthenticatedSMTP.png]]&lt;br /&gt;
Login to the Exchange admin center (&amp;lt;nowiki&amp;gt;https://admin.exchange.microsoft.com&amp;lt;/nowiki&amp;gt;).&lt;br /&gt;
[[File:ExchangeAdminCenter.png|none|thumb|600x600px|/ExchangeAdminCenter.png|/ExchangeAdminCenter.png]]&lt;br /&gt;
Remove deactivation of the SMTP AUTH protocol.&lt;br /&gt;
[[File:ExchangeRemoveDeavtivatedOAuth2.png|none|thumb|600x600px|/ExchangeRemoveDeavtivatedOAuth2.png|/ExchangeRemoveDeavtivatedOAuth2.png]]&lt;br /&gt;
With this Microsoft setup the OAuth2 configuration for the resource owner password credentials flow can be filled in as follows. &lt;br /&gt;
[[File:OAuth2ResourceOwnerPasswordCredentials.png|none|thumb|600x600px|/OAuth2ResourceOwnerPasswordCredentials.png|/OAuth2ResourceOwnerPasswordCredentials.png]]&lt;br /&gt;
For interactive authorization this is the OAuth2 configuration. Authorize e-mail access one time and send a test mail to verify everything went well.&lt;br /&gt;
[[File:OAuth2InteractiveAuthorization.png|none|thumb|600x600px|/OAuth2InteractiveAuthorization.png|/OAuth2InteractiveAuthorization.png]]&lt;br /&gt;
&lt;br /&gt;
== Gmail ==&lt;br /&gt;
Login to the Google Cloud Console (https://console.cloud.google.com), select a project, New project.&lt;br /&gt;
[[File:GoogleSelectProject.png|none|thumb|600x600px|/GoogleSelectProject.png|/GoogleSelectProject.png]]&lt;br /&gt;
Create the project.&lt;br /&gt;
[[File:GoogleCreateProject.png|none|thumb|600x600px|/GoogleCreateProject.png|/GoogleCreateProject.png]]&lt;br /&gt;
Client credentials will be created in this project.&lt;br /&gt;
[[File:GoogleProjectCreated.png|none|thumb|600x600px|/GoogleProjectCreated.png|/GoogleProjectCreated.png]]&lt;br /&gt;
From the library specify the APIs needed to access.&lt;br /&gt;
[[File:GoogleApisServicesFromLibrary.png|none|thumb|600x600px|/GoogleApisServicesFromLibrary.png|/GoogleApisServicesFromLibrary.png]]&lt;br /&gt;
These are in the Gmail API.&lt;br /&gt;
[[File:GoogleApisServicesApiLibrary.png|none|thumb|600x600px|/GoogleApisServicesApiLibrary.png|/GoogleApisServicesApiLibrary.png]]&lt;br /&gt;
Choose the Gmail API and enable it.&lt;br /&gt;
[[File:GoogleGmailApis.png|none|thumb|600x600px|/GoogleGmailApis.png|/GoogleGmailApis.png]]&lt;br /&gt;
Credentials need to be created.&lt;br /&gt;
[[File:GoogleGmailApiAdded.png|none|thumb|600x600px|/GoogleGmailApiAdded.png|/GoogleGmailApiAdded.png]]&lt;br /&gt;
Invoke the help me choose wizard.&lt;br /&gt;
[[File:GoogleCreateCredentialsHelpMeChoose.png|none|thumb|600x600px|/GoogleCreateCredentialsHelpMeChoose.png|/GoogleCreateCredentialsHelpMeChoose.png]]&lt;br /&gt;
User data access is needed.&lt;br /&gt;
[[File:GoogleCredentialsUserData.png|none|thumb|600x600px|/GoogleCredentialsUserData.png|/GoogleCredentialsUserData.png]]&lt;br /&gt;
Configure the consent screen of the interactive authorization.&lt;br /&gt;
[[File:GoogleOAuthConsentScreen.png|none|thumb|600x600px|/GoogleOAuthConsentScreen.png|/GoogleOAuthConsentScreen.png]]&lt;br /&gt;
Specify the permissions that need to be authorized by the user.&lt;br /&gt;
[[File:GoogleOAuthScopes.png|none|thumb|600x600px|/GoogleOAuthScopes.png|/GoogleOAuthScopes.png]]&lt;br /&gt;
Its mail.google.com in general.&lt;br /&gt;
[[File:GoogleScopeMailGoogleCom.png|none|thumb|600x600px|/GoogleScopeMailGoogleCom.png|/GoogleScopeMailGoogleCom.png]]&lt;br /&gt;
And its to send email on the users behalf.&lt;br /&gt;
[[File:GoogleScopeAuthGmailSend.png|none|thumb|600x600px|/GoogleScopeAuthGmailSend.png|/GoogleScopeAuthGmailSend.png]]&lt;br /&gt;
These are the scopes needed.&lt;br /&gt;
[[File:GoogleScopes.png|none|thumb|600x600px|/GoogleScopes.png|/GoogleScopes.png]]&lt;br /&gt;
Ask client credentials for Web type application.&lt;br /&gt;
[[File:GoogleOAuthClientID.png|none|thumb|600x600px|/GoogleOAuthClientID.png|/GoogleOAuthClientID.png]]&lt;br /&gt;
Tell all redirect URIs that the PBX and the apps will be using during interactive authorization.&lt;br /&gt;
[[File:GoogleRedirectURIs.png|none|thumb|600x600px|/GoogleRedirectURIs.png|/GoogleRedirectURIs.png]]&lt;br /&gt;
Download the credentials. This json file contains all information for OAuth2 configuration.&lt;br /&gt;
[[File:GoogleClientCredentialsDownload.png|none|thumb|600x600px|/GoogleClientCredentialsDownload.png|/GoogleClientCredentialsDownload.png]]&lt;br /&gt;
Customize the OAuth consent screen&lt;br /&gt;
[[File:GoogleOAuthConsentScreenSettings.png|none|thumb|600x600px|/GoogleOAuthConsentScreenSettings.png|/GoogleOAuthConsentScreenSettings.png]]&lt;br /&gt;
Start the customization wizard.&lt;br /&gt;
[[File:GoogleConsentScreenWizard.png|none|thumb|600x600px|/GoogleConsentScreenWizard.png|/GoogleConsentScreenWizard.png]]&lt;br /&gt;
Choose which users may authorize.&lt;br /&gt;
[[File:GoogleAudienceExternal.png|none|thumb|600x600px|/GoogleAudienceExternal.png|/GoogleAudienceExternal.png]]&lt;br /&gt;
Google workspace users may choose internal audience. Users not in Google workspace proceed with external.&lt;br /&gt;
[[File:GoogleContactInformation.png|none|thumb|600x600px|/GoogleContactInformation.png|/GoogleContactInformation.png]]&lt;br /&gt;
Add a test user.&lt;br /&gt;
[[File:GoogleTestUserAdded.png|none|thumb|600x600px|/GoogleTestUserAdded.png|/GoogleTestUserAdded.png]]&lt;br /&gt;
The OAuth2 parameters can be filled in with the information from the json file downloaded above. Authorize e-mail access one time and send a test mail to verify everything went well.&lt;br /&gt;
[[File:OAuth2InteractiveGmail.png|none|thumb|600x600px|/OAuth2InteractiveGmail.png|/OAuth2InteractiveGmail.png]]&lt;br /&gt;
&lt;br /&gt;
== Generic ==&lt;br /&gt;
&lt;br /&gt;
For other e-mail providers the client secret post OAuth2 flow may be configured in a generic way. Details need to be supplied by the e-mail provider.&lt;br /&gt;
[[File:OAuth2ClientSecretPost.png|none|thumb|600x600px|/OAuth2ClientSecretPost.png|/OAuth2ClientSecretPost.png]]&lt;br /&gt;
The private key jwt OAuth2 flow can be configured generically as well.&lt;br /&gt;
[[File:OAuth2PrivateKeyJWT.png|none|thumb|600x600px|/OAuth2PrivateKeyJWT.png|/OAuth2PrivateKeyJWT.png]]&lt;/div&gt;</summary>
		<author><name>Tmo</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Howto16r1:Configure_OAuth2_E-Mail&amp;diff=78152</id>
		<title>Howto16r1:Configure OAuth2 E-Mail</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Howto16r1:Configure_OAuth2_E-Mail&amp;diff=78152"/>
		<updated>2025-10-03T08:16:53Z</updated>

		<summary type="html">&lt;p&gt;Tmo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{FIXME|reason=This product is in the beta phase and is not yet finished}}&lt;br /&gt;
&lt;br /&gt;
innovaphone PBX and apps can be configured to send E-Mails for various subjects and purposes. Major E-Mail providers intent to discontinue the username/password authentication schemes in favour of OAuth2. PBX and Apps version 16r1 does support OAuth2 authentication for SMTP. Here is a step by step guide how to set up OAuth2 support in Microsoft 365 through the Azure Portal and how to set it up on a Google Gmail account in the Google Cloud Console.&lt;br /&gt;
&lt;br /&gt;
== Microsoft 365 ==&lt;br /&gt;
Log in to Microsoft Azure Portal (&amp;lt;nowiki&amp;gt;https://portal.azure.com&amp;lt;/nowiki&amp;gt;) and go to Microsoft Entra ID.&lt;br /&gt;
[[File:AzureMicrosoftEntraID.png|none|thumb|600x600px|/AzureMicrosoftEntraID.png|/AzureMicrosoftEntraID.png]]&lt;br /&gt;
Add a new app registration to create client credentials.&lt;br /&gt;
[[File:AzureAddAppRegistration.png|none|thumb|600x600px|/AzureAddAppRegistration.png|/AzureAddAppRegistration.png]]&lt;br /&gt;
Register the application and maybe already fill in the redirect URI for Web based application type to path OAUTH2-CLIENT/auth.htm at the PBX.&lt;br /&gt;
[[File:AzureRegisterAnApplication.png|none|thumb|600x600px|/AzureRegisterAnApplication.png|/AzureRegisterAnApplication.png]]&lt;br /&gt;
App registration is complete. Client ID and tenant needs to be configured at the PBX and every app that will be sending e-mails.&lt;br /&gt;
[[File:AzureApp.png|none|thumb|600x600px|/AzureApp.png|/AzureApp.png]]&lt;br /&gt;
Create a client secret.&lt;br /&gt;
[[File:AzureAddClientSecret.png|none|thumb|600x600px|/AzureAddClientSecret.png|/AzureAddClientSecret.png]]&lt;br /&gt;
Copy the client secret. It also needs to be configured at the PBX and every app that will be sending e-mails.&lt;br /&gt;
[[File:AzureCopyClientSecret.png|none|thumb|600x600px|/AzureCopyClientSecret.png|/AzureCopyClientSecret.png]]&lt;br /&gt;
Add permissions located in APIs my organization uses.&lt;br /&gt;
[[File:AzureAddApiPermissionMyOrganization.png|none|thumb|600x600px|/AzureAddApiPermissionMyOrganization.png|/AzureAddApiPermissionMyOrganization.png]]&lt;br /&gt;
More precisely located in Office 365 Exchange Online.&lt;br /&gt;
[[File:AzureAddApiPermissionExchange.png|none|thumb|600x600px|/AzureAddApiPermissionExchange.png|/AzureAddApiPermissionExchange.png]]&lt;br /&gt;
And there in the application permissions.&lt;br /&gt;
[[File:AzureAddApiExchangeApplication.png|none|thumb|600x600px|/AzureAddApiExchangeApplication.png|/AzureAddApiExchangeApplication.png]]&lt;br /&gt;
Namely SMTP Mail.Send.&lt;br /&gt;
[[File:AzureAddApiSendMailAsUser.png|none|thumb|600x600px|/AzureAddApiSendMailAsUser.png|/AzureAddApiSendMailAsUser.png]]&lt;br /&gt;
Grant admin permission for Mail.Send.&lt;br /&gt;
[[File:AzureGrantApiPermissions.png|none|thumb|600x600px|/AzureGrantApiPermissions.png|/AzureGrantApiPermissions.png]]&lt;br /&gt;
API permissions are now granted.&lt;br /&gt;
[[File:AzureApiPermissionsGranted.png|none|thumb|600x600px|/AzureApiPermissionsGranted.png|/AzureApiPermissionsGranted.png]]&lt;br /&gt;
Tell all redirect URIs that the PBX and the apps will be using during interactive authorization.&lt;br /&gt;
[[File:AzureRedirectUris.png|none|thumb|600x600px|/AzureRedirectUris.png|/AzureRedirectUris.png]]&lt;br /&gt;
Allow public client flows of OAuth2. Resource Owner Password Credentials Flow has the advantage that it doesn&#039;t need interactive authorization.&lt;br /&gt;
[[File:AzureAllowPublicClientFlows.png|none|thumb|600x600px|/AzureAllowPublicClientFlows.png|/AzureAllowPublicClientFlows.png]]&lt;br /&gt;
Log in to the Microsoft 365 admin center (https://admin.cloud.microsoft).&lt;br /&gt;
[[File:MS365AdminCenter.png|none|thumb|600x600px|/MS365AdminCenter.png|/MS365AdminCenter.png]]&lt;br /&gt;
Make sure that Microsoft 365 licenses are assigned to your user.&lt;br /&gt;
[[File:MS365UserLicenses.png|none|thumb|600x600px|/MS365UserLicenses.png|/MS365UserLicenses.png]]&lt;br /&gt;
Set your user active.&lt;br /&gt;
[[File:MS365ActiveUsers.png|none|thumb|600x600px|/MS365ActiveUsers.png|/MS365ActiveUsers.png]]&lt;br /&gt;
Locate the Mail tab of your user.&lt;br /&gt;
[[File:MS365UserEMail.png|none|thumb|600x600px|/MS365UserEMail.png|/MS365UserEMail.png]]&lt;br /&gt;
Allow authenticated SMTP.&lt;br /&gt;
[[File:MS365AuthenticatedSMTP.png|none|thumb|600x600px|/MS365AuthenticatedSMTP.png|/MS365AuthenticatedSMTP.png]]&lt;br /&gt;
Login to the Exchange admin center (&amp;lt;nowiki&amp;gt;https://admin.exchange.microsoft.com&amp;lt;/nowiki&amp;gt;).&lt;br /&gt;
[[File:ExchangeAdminCenter.png|none|thumb|600x600px|/ExchangeAdminCenter.png|/ExchangeAdminCenter.png]]&lt;br /&gt;
Remove deactivation of the SMTP AUTH protocol.&lt;br /&gt;
[[File:ExchangeRemoveDeavtivatedOAuth2.png|none|thumb|600x600px|/ExchangeRemoveDeavtivatedOAuth2.png|/ExchangeRemoveDeavtivatedOAuth2.png]]&lt;br /&gt;
With this Microsoft setup the OAuth2 configuration for the resource owner password credentials flow can be filled in as follows. &lt;br /&gt;
[[File:OAuth2ResourceOwnerPasswordCredentials.png|none|thumb|600x600px|/OAuth2ResourceOwnerPasswordCredentials.png|/OAuth2ResourceOwnerPasswordCredentials.png]]&lt;br /&gt;
For interactive authorization this is the OAuth2 configuration. Authorize e-mail access one time and send a test mail to verify everything went well.&lt;br /&gt;
[[File:OAuth2InteractiveAuthorization.png|none|thumb|600x600px|/OAuth2InteractiveAuthorization.png|/OAuth2InteractiveAuthorization.png]]&lt;br /&gt;
&lt;br /&gt;
== Gmail ==&lt;br /&gt;
Login to the Google Cloud Console (https://console.cloud.google.com), select a project, New project.&lt;br /&gt;
[[File:GoogleSelectProject.png|none|thumb|600x600px|/GoogleSelectProject.png|/GoogleSelectProject.png]]&lt;br /&gt;
Create the project.&lt;br /&gt;
[[File:GoogleCreateProject.png|none|thumb|600x600px|/GoogleCreateProject.png|/GoogleCreateProject.png]]&lt;br /&gt;
Client credentials will be created in this project.&lt;br /&gt;
[[File:GoogleProjectCreated.png|none|thumb|600x600px|/GoogleProjectCreated.png|/GoogleProjectCreated.png]]&lt;br /&gt;
From the library specify the APIs needed to access.&lt;br /&gt;
[[File:GoogleApisServicesFromLibrary.png|none|thumb|600x600px|/GoogleApisServicesFromLibrary.png|/GoogleApisServicesFromLibrary.png]]&lt;br /&gt;
These are in the Gmail API.&lt;br /&gt;
[[File:GoogleApisServicesApiLibrary.png|none|thumb|600x600px|/GoogleApisServicesApiLibrary.png|/GoogleApisServicesApiLibrary.png]]&lt;br /&gt;
Choose the Gmail API and enable it.&lt;br /&gt;
[[File:GoogleGmailApis.png|none|thumb|600x600px|/GoogleGmailApis.png|/GoogleGmailApis.png]]&lt;br /&gt;
Credentials need to be created.&lt;br /&gt;
[[File:GoogleGmailApiAdded.png|none|thumb|600x600px|/GoogleGmailApiAdded.png|/GoogleGmailApiAdded.png]]&lt;br /&gt;
Invoke the help me choose wizard.&lt;br /&gt;
[[File:GoogleCreateCredentialsHelpMeChoose.png|none|thumb|600x600px|/GoogleCreateCredentialsHelpMeChoose.png|/GoogleCreateCredentialsHelpMeChoose.png]]&lt;br /&gt;
User data access is needed.&lt;br /&gt;
[[File:GoogleCredentialsUserData.png|none|thumb|600x600px|/GoogleCredentialsUserData.png|/GoogleCredentialsUserData.png]]&lt;br /&gt;
Configure the consent screen of the interactive authorization.&lt;br /&gt;
[[File:GoogleOAuthConsentScreen.png|none|thumb|600x600px|/GoogleOAuthConsentScreen.png|/GoogleOAuthConsentScreen.png]]&lt;br /&gt;
Specify the permissions that need to be authorized by the user.&lt;br /&gt;
[[File:GoogleOAuthScopes.png|none|thumb|600x600px|/GoogleOAuthScopes.png|/GoogleOAuthScopes.png]]&lt;br /&gt;
Its mail.google.com in general.&lt;br /&gt;
[[File:GoogleScopeMailGoogleCom.png|none|thumb|600x600px|/GoogleScopeMailGoogleCom.png|/GoogleScopeMailGoogleCom.png]]&lt;br /&gt;
And its to send email on the users behalf.&lt;br /&gt;
[[File:GoogleScopeAuthGmailSend.png|none|thumb|600x600px|/GoogleScopeAuthGmailSend.png|/GoogleScopeAuthGmailSend.png]]&lt;br /&gt;
These are the scopes needed.&lt;br /&gt;
[[File:GoogleScopes.png|none|thumb|600x600px|/GoogleScopes.png|/GoogleScopes.png]]&lt;br /&gt;
Ask client credentials for Web type application.&lt;br /&gt;
[[File:GoogleOAuthClientID.png|none|thumb|600x600px|/GoogleOAuthClientID.png|/GoogleOAuthClientID.png]]&lt;br /&gt;
Tell all redirect URIs that the PBX and the apps will be using during interactive authorization.&lt;br /&gt;
[[File:GoogleRedirectURIs.png|none|thumb|600x600px|/GoogleRedirectURIs.png|/GoogleRedirectURIs.png]]&lt;br /&gt;
Download the credentials. This json file contains all information for OAuth2 configuration.&lt;br /&gt;
[[File:GoogleClientCredentialsDownload.png|none|thumb|600x600px|/GoogleClientCredentialsDownload.png|/GoogleClientCredentialsDownload.png]]&lt;br /&gt;
Customize the OAuth consent screen&lt;br /&gt;
[[File:GoogleOAuthConsentScreenSettings.png|none|thumb|600x600px|/GoogleOAuthConsentScreenSettings.png|/GoogleOAuthConsentScreenSettings.png]]&lt;br /&gt;
Start the customization wizard.&lt;br /&gt;
[[File:GoogleConsentScreenWizard.png|none|thumb|600x600px|/GoogleConsentScreenWizard.png|/GoogleConsentScreenWizard.png]]&lt;br /&gt;
Choose which users may authorize.&lt;br /&gt;
[[File:GoogleAudienceExternal.png|none|thumb|600x600px|/GoogleAudienceExternal.png|/GoogleAudienceExternal.png]]&lt;br /&gt;
Google workspace users may choose internal audience. Users not in Google workspace proceed with external.&lt;br /&gt;
[[File:GoogleContactInformation.png|none|thumb|600x600px|/GoogleContactInformation.png|/GoogleContactInformation.png]]&lt;br /&gt;
Add a test user.&lt;br /&gt;
[[File:GoogleTestUserAdded.png|none|thumb|600x600px|/GoogleTestUserAdded.png|/GoogleTestUserAdded.png]]&lt;br /&gt;
The OAuth2 parameters can be filled in with the information from the json file downloaded above.&lt;br /&gt;
[[File:OAuth2InteractiveGmail.png|none|thumb|600x600px|/OAuth2InteractiveGmail.png|/OAuth2InteractiveGmail.png]]&lt;br /&gt;
&lt;br /&gt;
== Generic ==&lt;br /&gt;
&lt;br /&gt;
For other e-mail providers the client secret post OAuth2 flow may be configured in a generic way. Details need to be supplied by the e-mail provider.&lt;br /&gt;
[[File:OAuth2ClientSecretPost.png|none|thumb|600x600px|/OAuth2ClientSecretPost.png|/OAuth2ClientSecretPost.png]]&lt;br /&gt;
The private key jwt OAuth2 flow can be configured generically as well.&lt;br /&gt;
[[File:OAuth2PrivateKeyJWT.png|none|thumb|600x600px|/OAuth2PrivateKeyJWT.png]]&lt;/div&gt;</summary>
		<author><name>Tmo</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Howto16r1:Configure_OAuth2_E-Mail&amp;diff=78151</id>
		<title>Howto16r1:Configure OAuth2 E-Mail</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Howto16r1:Configure_OAuth2_E-Mail&amp;diff=78151"/>
		<updated>2025-10-03T08:16:26Z</updated>

		<summary type="html">&lt;p&gt;Tmo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{FIXME|reason=This product is in the beta phase and is not yet finished}}&lt;br /&gt;
&lt;br /&gt;
innovaphone PBX and apps can be configured to send E-Mails for various subjects and purposes. Major E-Mail providers intent to discontinue the username/password authentication schemes in favour of OAuth2. PBX and Apps version 16r1 does support OAuth2 authentication for SMTP. Here is a step by step guide how to set up OAuth2 support in Microsoft 365 through the Azure Portal and how to set it up on a Google Gmail account in the Google Cloud Console.&lt;br /&gt;
&lt;br /&gt;
== Microsoft 365 ==&lt;br /&gt;
Log in to Microsoft Azure Portal (&amp;lt;nowiki&amp;gt;https://portal.azure.com&amp;lt;/nowiki&amp;gt;) and go to Microsoft Entra ID.&lt;br /&gt;
[[File:AzureMicrosoftEntraID.png|none|thumb|600x600px|/AzureMicrosoftEntraID.png|/AzureMicrosoftEntraID.png]]&lt;br /&gt;
Add a new app registration to create client credentials.&lt;br /&gt;
[[File:AzureAddAppRegistration.png|none|thumb|600x600px|/AzureAddAppRegistration.png|/AzureAddAppRegistration.png]]&lt;br /&gt;
Register the application and maybe already fill in the redirect URI for Web based application type to path OAUTH2-CLIENT/auth.htm at the PBX.&lt;br /&gt;
[[File:AzureRegisterAnApplication.png|none|thumb|600x600px|/AzureRegisterAnApplication.png|/AzureRegisterAnApplication.png]]&lt;br /&gt;
App registration is complete. Client ID and tenant needs to be configured at the PBX and every app that will be sending e-mails.&lt;br /&gt;
[[File:AzureApp.png|none|thumb|600x600px|/AzureApp.png|/AzureApp.png]]&lt;br /&gt;
Create a client secret.&lt;br /&gt;
[[File:AzureAddClientSecret.png|none|thumb|600x600px|/AzureAddClientSecret.png|/AzureAddClientSecret.png]]&lt;br /&gt;
Copy the client secret. It also needs to be configured at the PBX and every app that will be sending e-mails.&lt;br /&gt;
[[File:AzureCopyClientSecret.png|none|thumb|600x600px|/AzureCopyClientSecret.png|/AzureCopyClientSecret.png]]&lt;br /&gt;
Add permissions located in APIs my organization uses.&lt;br /&gt;
[[File:AzureAddApiPermissionMyOrganization.png|none|thumb|600x600px|/AzureAddApiPermissionMyOrganization.png|/AzureAddApiPermissionMyOrganization.png]]&lt;br /&gt;
More precisely located in Office 365 Exchange Online.&lt;br /&gt;
[[File:AzureAddApiPermissionExchange.png|none|thumb|600x600px|/AzureAddApiPermissionExchange.png|/AzureAddApiPermissionExchange.png]]&lt;br /&gt;
And there in the application permissions.&lt;br /&gt;
[[File:AzureAddApiExchangeApplication.png|none|thumb|600x600px|/AzureAddApiExchangeApplication.png|/AzureAddApiExchangeApplication.png]]&lt;br /&gt;
Namely SMTP Mail.Send.&lt;br /&gt;
[[File:AzureAddApiSendMailAsUser.png|none|thumb|600x600px|/AzureAddApiSendMailAsUser.png|/AzureAddApiSendMailAsUser.png]]&lt;br /&gt;
Grant admin permission for Mail.Send.&lt;br /&gt;
[[File:AzureGrantApiPermissions.png|none|thumb|600x600px|/AzureGrantApiPermissions.png|/AzureGrantApiPermissions.png]]&lt;br /&gt;
API permissions are now granted.&lt;br /&gt;
[[File:AzureApiPermissionsGranted.png|none|thumb|600x600px|/AzureApiPermissionsGranted.png|/AzureApiPermissionsGranted.png]]&lt;br /&gt;
Tell all redirect URIs that the PBX and the apps will be using during interactive authorization.&lt;br /&gt;
[[File:AzureRedirectUris.png|none|thumb|600x600px|/AzureRedirectUris.png|/AzureRedirectUris.png]]&lt;br /&gt;
Allow public client flows of OAuth2. Resource Owner Password Credentials Flow has the advantage that it doesn&#039;t need interactive authorization.&lt;br /&gt;
[[File:AzureAllowPublicClientFlows.png|none|thumb|600x600px|/AzureAllowPublicClientFlows.png|/AzureAllowPublicClientFlows.png]]&lt;br /&gt;
Log in to the Microsoft 365 admin center (https://admin.cloud.microsoft).&lt;br /&gt;
[[File:MS365AdminCenter.png|none|thumb|600x600px|/MS365AdminCenter.png|/MS365AdminCenter.png]]&lt;br /&gt;
Make sure that Microsoft 365 licenses are assigned to your user.&lt;br /&gt;
[[File:MS365UserLicenses.png|none|thumb|600x600px|/MS365UserLicenses.png|/MS365UserLicenses.png]]&lt;br /&gt;
Set your user active.&lt;br /&gt;
[[File:MS365ActiveUsers.png|none|thumb|600x600px|/MS365ActiveUsers.png|/MS365ActiveUsers.png]]&lt;br /&gt;
Locate the Mail tab of your user.&lt;br /&gt;
[[File:MS365UserEMail.png|none|thumb|600x600px|/MS365UserEMail.png|/MS365UserEMail.png]]&lt;br /&gt;
Allow authenticated SMTP.&lt;br /&gt;
[[File:MS365AuthenticatedSMTP.png|none|thumb|600x600px|/MS365AuthenticatedSMTP.png|/MS365AuthenticatedSMTP.png]]&lt;br /&gt;
Login to the Exchange admin center (&amp;lt;nowiki&amp;gt;https://admin.exchange.microsoft.com&amp;lt;/nowiki&amp;gt;).&lt;br /&gt;
[[File:ExchangeAdminCenter.png|none|thumb|600x600px|/ExchangeAdminCenter.png|/ExchangeAdminCenter.png]]&lt;br /&gt;
Remove deactivation of the SMTP AUTH protocol.&lt;br /&gt;
[[File:ExchangeRemoveDeavtivatedOAuth2.png|none|thumb|600x600px|/ExchangeRemoveDeavtivatedOAuth2.png|/ExchangeRemoveDeavtivatedOAuth2.png]]&lt;br /&gt;
With this Microsoft setup the OAuth2 configuration for the resource owner password credentials flow can be filled in as follows. &lt;br /&gt;
[[File:OAuth2ResourceOwnerPasswordCredentials.png|none|thumb|600x600px|/OAuth2ResourceOwnerPasswordCredentials.png|/OAuth2ResourceOwnerPasswordCredentials.png]]&lt;br /&gt;
For interactive authorization this is the OAuth2 configuration. Authorize e-mail access one time and send a test mail to verify everything went well.&lt;br /&gt;
[[File:OAuth2InteractiveAuthorization.png|none|thumb|600x600px|/OAuth2InteractiveAuthorization.png|/OAuth2InteractiveAuthorization.png]]&lt;br /&gt;
&lt;br /&gt;
== Gmail ==&lt;br /&gt;
Login to the Google Cloud Console (https://console.cloud.google.com), select a project, New project.&lt;br /&gt;
[[File:GoogleSelectProject.png|none|thumb|600x600px|/GoogleSelectProject.png|/GoogleSelectProject.png]]&lt;br /&gt;
Create the project.&lt;br /&gt;
[[File:GoogleCreateProject.png|none|thumb|600x600px|/GoogleCreateProject.png|/GoogleCreateProject.png]]&lt;br /&gt;
Client credentials will be created in this project.&lt;br /&gt;
[[File:GoogleProjectCreated.png|none|thumb|600x600px|/GoogleProjectCreated.png|/GoogleProjectCreated.png]]&lt;br /&gt;
From the library specify the APIs needed to access.&lt;br /&gt;
[[File:GoogleApisServicesFromLibrary.png|none|thumb|600x600px|/GoogleApisServicesFromLibrary.png|/GoogleApisServicesFromLibrary.png]]&lt;br /&gt;
These are in the Gmail API.&lt;br /&gt;
[[File:GoogleApisServicesApiLibrary.png|none|thumb|600x600px|/GoogleApisServicesApiLibrary.png|/GoogleApisServicesApiLibrary.png]]&lt;br /&gt;
Choose the Gmail API and enable it.&lt;br /&gt;
[[File:GoogleGmailApis.png|none|thumb|600x600px|/GoogleGmailApis.png|/GoogleGmailApis.png]]&lt;br /&gt;
Credentials need to be created.&lt;br /&gt;
[[File:GoogleGmailApiAdded.png|none|thumb|600x600px|/GoogleGmailApiAdded.png|/GoogleGmailApiAdded.png]]&lt;br /&gt;
Invoke the help me choose wizard.&lt;br /&gt;
[[File:GoogleCreateCredentialsHelpMeChoose.png|none|thumb|600x600px|/GoogleCreateCredentialsHelpMeChoose.png|/GoogleCreateCredentialsHelpMeChoose.png]]&lt;br /&gt;
User data access is needed.&lt;br /&gt;
[[File:GoogleCredentialsUserData.png|none|thumb|600x600px|/GoogleCredentialsUserData.png|/GoogleCredentialsUserData.png]]&lt;br /&gt;
Configure the consent screen of the interactive authorization.&lt;br /&gt;
[[File:GoogleOAuthConsentScreen.png|none|thumb|600x600px|/GoogleOAuthConsentScreen.png|/GoogleOAuthConsentScreen.png]]&lt;br /&gt;
Specify the permissions that need to be authorized by the user.&lt;br /&gt;
[[File:GoogleOAuthScopes.png|none|thumb|600x600px|/GoogleOAuthScopes.png|/GoogleOAuthScopes.png]]&lt;br /&gt;
Its mail.google.com in general.&lt;br /&gt;
[[File:GoogleScopeMailGoogleCom.png|none|thumb|600x600px|/GoogleScopeMailGoogleCom.png|/GoogleScopeMailGoogleCom.png]]&lt;br /&gt;
And its to send email on the users behalf.&lt;br /&gt;
[[File:GoogleScopeAuthGmailSend.png|none|thumb|600x600px|/GoogleScopeAuthGmailSend.png|/GoogleScopeAuthGmailSend.png]]&lt;br /&gt;
These are the scopes needed.&lt;br /&gt;
[[File:GoogleScopes.png|none|thumb|600x600px|/GoogleScopes.png|/GoogleScopes.png]]&lt;br /&gt;
Ask client credentials for Web type application.&lt;br /&gt;
[[File:GoogleOAuthClientID.png|none|thumb|600x600px|/GoogleOAuthClientID.png|/GoogleOAuthClientID.png]]&lt;br /&gt;
Tell all redirect URIs that the PBX and the apps will be using during interactive authorization.&lt;br /&gt;
[[File:GoogleRedirectURIs.png|none|thumb|600x600px|/GoogleRedirectURIs.png|/GoogleRedirectURIs.png]]&lt;br /&gt;
Download the credentials. This json file contains all information for OAuth2 configuration.&lt;br /&gt;
[[File:GoogleClientCredentialsDownload.png|none|thumb|600x600px|/GoogleClientCredentialsDownload.png|/GoogleClientCredentialsDownload.png]]&lt;br /&gt;
Customize the OAuth consent screen&lt;br /&gt;
[[File:GoogleOAuthConsentScreenSettings.png|none|thumb|600x600px|/GoogleOAuthConsentScreenSettings.png|/GoogleOAuthConsentScreenSettings.png]]&lt;br /&gt;
Start the customization wizard.&lt;br /&gt;
[[File:GoogleConsentScreenWizard.png|none|thumb|600x600px|/GoogleConsentScreenWizard.png|/GoogleConsentScreenWizard.png]]&lt;br /&gt;
Choose which users may authorize.&lt;br /&gt;
[[File:GoogleAudienceExternal.png|none|thumb|600x600px|/GoogleAudienceExternal.png|/GoogleAudienceExternal.png]]&lt;br /&gt;
Google workspace users may choose internal audience. Users not in Google workspace proceed with external.&lt;br /&gt;
[[File:GoogleContactInformation.png|none|thumb|600x600px|/GoogleContactInformation.png|/GoogleContactInformation.png]]&lt;br /&gt;
Add a test user.&lt;br /&gt;
[[File:GoogleTestUserAdded.png|none|thumb|600x600px|/GoogleTestUserAdded.png|/GoogleTestUserAdded.png]]&lt;br /&gt;
The OAuth2 parameters can be filled in with the information from the json file downloaded above.&lt;br /&gt;
[[File:OAuth2InteractiveGmail.png|none|thumb|600x600px|/OAuth2InteractiveGmail.png|/OAuth2InteractiveGmail.png]]&lt;br /&gt;
&lt;br /&gt;
== Generic ==&lt;br /&gt;
&lt;br /&gt;
For other e-mail providers the client secret post OAuth2 flow may be configured in a generic way. Details need to be supplied by the e-mail provider.&lt;br /&gt;
[[File:OAuth2ClientSecretPost.png|none|thumb|600x600px|/OAuth2ClientSecretPost.png|/OAuth2ClientSecretPost.png]]&lt;br /&gt;
The private key jwt OAuth2 flow can be configured generically as well.&lt;br /&gt;
[[File:OAuth2PrivateKeyJWT.png|none|thumb|600x600px]]&lt;/div&gt;</summary>
		<author><name>Tmo</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=File:OAuth2PrivateKeyJWT.png&amp;diff=78150</id>
		<title>File:OAuth2PrivateKeyJWT.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=File:OAuth2PrivateKeyJWT.png&amp;diff=78150"/>
		<updated>2025-10-03T08:15:18Z</updated>

		<summary type="html">&lt;p&gt;Tmo: Tmo uploaded a new version of File:OAuth2PrivateKeyJWT.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;OAuth2 Private Key JWT&lt;/div&gt;</summary>
		<author><name>Tmo</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Howto16r1:Configure_OAuth2_E-Mail&amp;diff=78149</id>
		<title>Howto16r1:Configure OAuth2 E-Mail</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Howto16r1:Configure_OAuth2_E-Mail&amp;diff=78149"/>
		<updated>2025-10-03T08:14:05Z</updated>

		<summary type="html">&lt;p&gt;Tmo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{FIXME|reason=This product is in the beta phase and is not yet finished}}&lt;br /&gt;
&lt;br /&gt;
innovaphone PBX and apps can be configured to send E-Mails for various subjects and purposes. Major E-Mail providers intent to discontinue the username/password authentication schemes in favour of OAuth2. PBX and Apps version 16r1 does support OAuth2 authentication for SMTP. Here is a step by step guide how to set up OAuth2 support in Microsoft 365 through the Azure Portal and how to set it up on a Google Gmail account in the Google Cloud Console.&lt;br /&gt;
&lt;br /&gt;
== Microsoft 365 ==&lt;br /&gt;
Log in to Microsoft Azure Portal (&amp;lt;nowiki&amp;gt;https://portal.azure.com&amp;lt;/nowiki&amp;gt;) and go to Microsoft Entra ID.&lt;br /&gt;
[[File:AzureMicrosoftEntraID.png|none|thumb|600x600px|/AzureMicrosoftEntraID.png|/AzureMicrosoftEntraID.png]]&lt;br /&gt;
Add a new app registration to create client credentials.&lt;br /&gt;
[[File:AzureAddAppRegistration.png|none|thumb|600x600px|/AzureAddAppRegistration.png|/AzureAddAppRegistration.png]]&lt;br /&gt;
Register the application and maybe already fill in the redirect URI for Web based application type to path OAUTH2-CLIENT/auth.htm at the PBX.&lt;br /&gt;
[[File:AzureRegisterAnApplication.png|none|thumb|600x600px|/AzureRegisterAnApplication.png|/AzureRegisterAnApplication.png]]&lt;br /&gt;
App registration is complete. Client ID and tenant needs to be configured at the PBX and every app that will be sending e-mails.&lt;br /&gt;
[[File:AzureApp.png|none|thumb|600x600px|/AzureApp.png|/AzureApp.png]]&lt;br /&gt;
Create a client secret.&lt;br /&gt;
[[File:AzureAddClientSecret.png|none|thumb|600x600px|/AzureAddClientSecret.png|/AzureAddClientSecret.png]]&lt;br /&gt;
Copy the client secret. It also needs to be configured at the PBX and every app that will be sending e-mails.&lt;br /&gt;
[[File:AzureCopyClientSecret.png|none|thumb|600x600px|/AzureCopyClientSecret.png|/AzureCopyClientSecret.png]]&lt;br /&gt;
Add permissions located in APIs my organization uses.&lt;br /&gt;
[[File:AzureAddApiPermissionMyOrganization.png|none|thumb|600x600px|/AzureAddApiPermissionMyOrganization.png|/AzureAddApiPermissionMyOrganization.png]]&lt;br /&gt;
More precisely located in Office 365 Exchange Online.&lt;br /&gt;
[[File:AzureAddApiPermissionExchange.png|none|thumb|600x600px|/AzureAddApiPermissionExchange.png|/AzureAddApiPermissionExchange.png]]&lt;br /&gt;
And there in the application permissions.&lt;br /&gt;
[[File:AzureAddApiExchangeApplication.png|none|thumb|600x600px|/AzureAddApiExchangeApplication.png|/AzureAddApiExchangeApplication.png]]&lt;br /&gt;
Namely SMTP Mail.Send.&lt;br /&gt;
[[File:AzureAddApiSendMailAsUser.png|none|thumb|600x600px|/AzureAddApiSendMailAsUser.png|/AzureAddApiSendMailAsUser.png]]&lt;br /&gt;
Grant admin permission for Mail.Send.&lt;br /&gt;
[[File:AzureGrantApiPermissions.png|none|thumb|600x600px|/AzureGrantApiPermissions.png|/AzureGrantApiPermissions.png]]&lt;br /&gt;
API permissions are now granted.&lt;br /&gt;
[[File:AzureApiPermissionsGranted.png|none|thumb|600x600px|/AzureApiPermissionsGranted.png|/AzureApiPermissionsGranted.png]]&lt;br /&gt;
Tell all redirect URIs that the PBX and the apps will be using during interactive authorization.&lt;br /&gt;
[[File:AzureRedirectUris.png|none|thumb|600x600px|/AzureRedirectUris.png|/AzureRedirectUris.png]]&lt;br /&gt;
Allow public client flows of OAuth2. Resource Owner Password Credentials Flow has the advantage that it doesn&#039;t need interactive authorization.&lt;br /&gt;
[[File:AzureAllowPublicClientFlows.png|none|thumb|600x600px|/AzureAllowPublicClientFlows.png|/AzureAllowPublicClientFlows.png]]&lt;br /&gt;
Log in to the Microsoft 365 admin center (https://admin.cloud.microsoft).&lt;br /&gt;
[[File:MS365AdminCenter.png|none|thumb|600x600px|/MS365AdminCenter.png|/MS365AdminCenter.png]]&lt;br /&gt;
Make sure that Microsoft 365 licenses are assigned to your user.&lt;br /&gt;
[[File:MS365UserLicenses.png|none|thumb|600x600px|/MS365UserLicenses.png|/MS365UserLicenses.png]]&lt;br /&gt;
Set your user active.&lt;br /&gt;
[[File:MS365ActiveUsers.png|none|thumb|600x600px|/MS365ActiveUsers.png|/MS365ActiveUsers.png]]&lt;br /&gt;
Locate the Mail tab of your user.&lt;br /&gt;
[[File:MS365UserEMail.png|none|thumb|600x600px|/MS365UserEMail.png|/MS365UserEMail.png]]&lt;br /&gt;
Allow authenticated SMTP.&lt;br /&gt;
[[File:MS365AuthenticatedSMTP.png|none|thumb|600x600px|/MS365AuthenticatedSMTP.png|/MS365AuthenticatedSMTP.png]]&lt;br /&gt;
Login to the Exchange admin center (&amp;lt;nowiki&amp;gt;https://admin.exchange.microsoft.com&amp;lt;/nowiki&amp;gt;).&lt;br /&gt;
[[File:ExchangeAdminCenter.png|none|thumb|600x600px|/ExchangeAdminCenter.png|/ExchangeAdminCenter.png]]&lt;br /&gt;
Remove deactivation of the SMTP AUTH protocol.&lt;br /&gt;
[[File:ExchangeRemoveDeavtivatedOAuth2.png|none|thumb|600x600px|/ExchangeRemoveDeavtivatedOAuth2.png|/ExchangeRemoveDeavtivatedOAuth2.png]]&lt;br /&gt;
With this Microsoft setup the OAuth2 configuration for the resource owner password credentials flow can be filled in as follows. &lt;br /&gt;
[[File:OAuth2ResourceOwnerPasswordCredentials.png|none|thumb|600x600px|/OAuth2ResourceOwnerPasswordCredentials.png|/OAuth2ResourceOwnerPasswordCredentials.png]]&lt;br /&gt;
For interactive authorization this is the OAuth2 configuration. Authorize e-mail access one time and send a test mail to verify everything went well.&lt;br /&gt;
[[File:OAuth2InteractiveAuthorization.png|none|thumb|600x600px|/OAuth2InteractiveAuthorization.png|/OAuth2InteractiveAuthorization.png]]&lt;br /&gt;
&lt;br /&gt;
== Gmail ==&lt;br /&gt;
Login to the Google Cloud Console (https://console.cloud.google.com), select a project, New project.&lt;br /&gt;
[[File:GoogleSelectProject.png|none|thumb|600x600px|/GoogleSelectProject.png|/GoogleSelectProject.png]]&lt;br /&gt;
Create the project.&lt;br /&gt;
[[File:GoogleCreateProject.png|none|thumb|600x600px|/GoogleCreateProject.png|/GoogleCreateProject.png]]&lt;br /&gt;
Client credentials will be created in this project.&lt;br /&gt;
[[File:GoogleProjectCreated.png|none|thumb|600x600px|/GoogleProjectCreated.png|/GoogleProjectCreated.png]]&lt;br /&gt;
From the library specify the APIs needed to access.&lt;br /&gt;
[[File:GoogleApisServicesFromLibrary.png|none|thumb|600x600px|/GoogleApisServicesFromLibrary.png|/GoogleApisServicesFromLibrary.png]]&lt;br /&gt;
These are in the Gmail API.&lt;br /&gt;
[[File:GoogleApisServicesApiLibrary.png|none|thumb|600x600px|/GoogleApisServicesApiLibrary.png|/GoogleApisServicesApiLibrary.png]]&lt;br /&gt;
Choose the Gmail API and enable it.&lt;br /&gt;
[[File:GoogleGmailApis.png|none|thumb|600x600px|/GoogleGmailApis.png|/GoogleGmailApis.png]]&lt;br /&gt;
Credentials need to be created.&lt;br /&gt;
[[File:GoogleGmailApiAdded.png|none|thumb|600x600px|/GoogleGmailApiAdded.png|/GoogleGmailApiAdded.png]]&lt;br /&gt;
Invoke the help me choose wizard.&lt;br /&gt;
[[File:GoogleCreateCredentialsHelpMeChoose.png|none|thumb|600x600px|/GoogleCreateCredentialsHelpMeChoose.png|/GoogleCreateCredentialsHelpMeChoose.png]]&lt;br /&gt;
User data access is needed.&lt;br /&gt;
[[File:GoogleCredentialsUserData.png|none|thumb|600x600px|/GoogleCredentialsUserData.png|/GoogleCredentialsUserData.png]]&lt;br /&gt;
Configure the consent screen of the interactive authorization.&lt;br /&gt;
[[File:GoogleOAuthConsentScreen.png|none|thumb|600x600px|/GoogleOAuthConsentScreen.png|/GoogleOAuthConsentScreen.png]]&lt;br /&gt;
Specify the permissions that need to be authorized by the user.&lt;br /&gt;
[[File:GoogleOAuthScopes.png|none|thumb|600x600px|/GoogleOAuthScopes.png|/GoogleOAuthScopes.png]]&lt;br /&gt;
Its mail.google.com in general.&lt;br /&gt;
[[File:GoogleScopeMailGoogleCom.png|none|thumb|600x600px|/GoogleScopeMailGoogleCom.png|/GoogleScopeMailGoogleCom.png]]&lt;br /&gt;
And its to send email on the users behalf.&lt;br /&gt;
[[File:GoogleScopeAuthGmailSend.png|none|thumb|600x600px|/GoogleScopeAuthGmailSend.png|/GoogleScopeAuthGmailSend.png]]&lt;br /&gt;
These are the scopes needed.&lt;br /&gt;
[[File:GoogleScopes.png|none|thumb|600x600px|/GoogleScopes.png|/GoogleScopes.png]]&lt;br /&gt;
Ask client credentials for Web type application.&lt;br /&gt;
[[File:GoogleOAuthClientID.png|none|thumb|600x600px|/GoogleOAuthClientID.png|/GoogleOAuthClientID.png]]&lt;br /&gt;
Tell all redirect URIs that the PBX and the apps will be using during interactive authorization.&lt;br /&gt;
[[File:GoogleRedirectURIs.png|none|thumb|600x600px|/GoogleRedirectURIs.png|/GoogleRedirectURIs.png]]&lt;br /&gt;
Download the credentials. This json file contains all information for OAuth2 configuration.&lt;br /&gt;
[[File:GoogleClientCredentialsDownload.png|none|thumb|600x600px|/GoogleClientCredentialsDownload.png|/GoogleClientCredentialsDownload.png]]&lt;br /&gt;
Customize the OAuth consent screen&lt;br /&gt;
[[File:GoogleOAuthConsentScreenSettings.png|none|thumb|600x600px|/GoogleOAuthConsentScreenSettings.png|/GoogleOAuthConsentScreenSettings.png]]&lt;br /&gt;
Start the customization wizard.&lt;br /&gt;
[[File:GoogleConsentScreenWizard.png|none|thumb|600x600px|/GoogleConsentScreenWizard.png|/GoogleConsentScreenWizard.png]]&lt;br /&gt;
Choose which users may authorize.&lt;br /&gt;
[[File:GoogleAudienceExternal.png|none|thumb|600x600px|/GoogleAudienceExternal.png|/GoogleAudienceExternal.png]]&lt;br /&gt;
Google workspace users may choose internal audience. Users not in Google workspace proceed with external.&lt;br /&gt;
[[File:GoogleContactInformation.png|none|thumb|600x600px|/GoogleContactInformation.png|/GoogleContactInformation.png]]&lt;br /&gt;
Add a test user.&lt;br /&gt;
[[File:GoogleTestUserAdded.png|none|thumb|600x600px|/GoogleTestUserAdded.png|/GoogleTestUserAdded.png]]&lt;br /&gt;
The OAuth2 parameters can be filled in with the information from the json file downloaded above.&lt;br /&gt;
[[File:OAuth2InteractiveGmail.png|none|thumb|600x600px|/OAuth2InteractiveGmail.png|/OAuth2InteractiveGmail.png]]&lt;br /&gt;
&lt;br /&gt;
== Generic ==&lt;br /&gt;
&lt;br /&gt;
For other e-mail providers the client secret post OAuth2 flow may be configured in a generic way. Details need to be supplied by the e-mail provider.&lt;br /&gt;
[[File:OAuth2ClientSecretPost.png|none|thumb|600x600px|/OAuth2ClientSecretPost.png|/OAuth2ClientSecretPost.png]]&lt;br /&gt;
The private key jwt OAuth2 flow can be configured generically as well.&lt;br /&gt;
&lt;br /&gt;
3&lt;/div&gt;</summary>
		<author><name>Tmo</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=File:OAuth2PrivateKeyJWT.png&amp;diff=78148</id>
		<title>File:OAuth2PrivateKeyJWT.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=File:OAuth2PrivateKeyJWT.png&amp;diff=78148"/>
		<updated>2025-10-03T08:11:27Z</updated>

		<summary type="html">&lt;p&gt;Tmo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;OAuth2 Private Key JWT&lt;/div&gt;</summary>
		<author><name>Tmo</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Howto16r1:Configure_OAuth2_E-Mail&amp;diff=78147</id>
		<title>Howto16r1:Configure OAuth2 E-Mail</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Howto16r1:Configure_OAuth2_E-Mail&amp;diff=78147"/>
		<updated>2025-10-03T07:58:49Z</updated>

		<summary type="html">&lt;p&gt;Tmo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{FIXME|reason=This product is in the beta phase and is not yet finished}}&lt;br /&gt;
&lt;br /&gt;
innovaphone PBX and apps can be configured to send E-Mails for various subjects and purposes. Major E-Mail providers intent to discontinue the username/password authentication schemes in favour of OAuth2. PBX and Apps version 16r1 does support OAuth2 authentication for SMTP. Here is a step by step guide how to set up OAuth2 support in Microsoft 365 through the Azure Portal and how to set it up on a Google Gmail account in the Google Cloud Console.&lt;br /&gt;
&lt;br /&gt;
== Microsoft 365 ==&lt;br /&gt;
Log in to Microsoft Azure Portal (&amp;lt;nowiki&amp;gt;https://portal.azure.com&amp;lt;/nowiki&amp;gt;) and go to Microsoft Entra ID.&lt;br /&gt;
[[File:AzureMicrosoftEntraID.png|none|thumb|600x600px|/AzureMicrosoftEntraID.png|/AzureMicrosoftEntraID.png]]&lt;br /&gt;
Add a new app registration to create client credentials.&lt;br /&gt;
[[File:AzureAddAppRegistration.png|none|thumb|600x600px|/AzureAddAppRegistration.png|/AzureAddAppRegistration.png]]&lt;br /&gt;
Register the application and maybe already fill in the redirect URI for Web based application type to path OAUTH2-CLIENT/auth.htm at the PBX.&lt;br /&gt;
[[File:AzureRegisterAnApplication.png|none|thumb|600x600px|/AzureRegisterAnApplication.png|/AzureRegisterAnApplication.png]]&lt;br /&gt;
App registration is complete. Client ID and tenant needs to be configured at the PBX and every app that will be sending e-mails.&lt;br /&gt;
[[File:AzureApp.png|none|thumb|600x600px|/AzureApp.png|/AzureApp.png]]&lt;br /&gt;
Create a client secret.&lt;br /&gt;
[[File:AzureAddClientSecret.png|none|thumb|600x600px|/AzureAddClientSecret.png|/AzureAddClientSecret.png]]&lt;br /&gt;
Copy the client secret. It also needs to be configured at the PBX and every app that will be sending e-mails.&lt;br /&gt;
[[File:AzureCopyClientSecret.png|none|thumb|600x600px|/AzureCopyClientSecret.png|/AzureCopyClientSecret.png]]&lt;br /&gt;
Add permissions located in APIs my organization uses.&lt;br /&gt;
[[File:AzureAddApiPermissionMyOrganization.png|none|thumb|600x600px|/AzureAddApiPermissionMyOrganization.png|/AzureAddApiPermissionMyOrganization.png]]&lt;br /&gt;
More precisely located in Office 365 Exchange Online.&lt;br /&gt;
[[File:AzureAddApiPermissionExchange.png|none|thumb|600x600px|/AzureAddApiPermissionExchange.png|/AzureAddApiPermissionExchange.png]]&lt;br /&gt;
And there in the application permissions.&lt;br /&gt;
[[File:AzureAddApiExchangeApplication.png|none|thumb|600x600px|/AzureAddApiExchangeApplication.png|/AzureAddApiExchangeApplication.png]]&lt;br /&gt;
Namely SMTP Mail.Send.&lt;br /&gt;
[[File:AzureAddApiSendMailAsUser.png|none|thumb|600x600px|/AzureAddApiSendMailAsUser.png|/AzureAddApiSendMailAsUser.png]]&lt;br /&gt;
Grant admin permission for Mail.Send.&lt;br /&gt;
[[File:AzureGrantApiPermissions.png|none|thumb|600x600px|/AzureGrantApiPermissions.png|/AzureGrantApiPermissions.png]]&lt;br /&gt;
API permissions are now granted.&lt;br /&gt;
[[File:AzureApiPermissionsGranted.png|none|thumb|600x600px|/AzureApiPermissionsGranted.png|/AzureApiPermissionsGranted.png]]&lt;br /&gt;
Tell all redirect URIs that the PBX and the apps will be using during interactive authorization.&lt;br /&gt;
[[File:AzureRedirectUris.png|none|thumb|600x600px|/AzureRedirectUris.png|/AzureRedirectUris.png]]&lt;br /&gt;
Allow public client flows of OAuth2. Resource Owner Password Credentials Flow has the advantage that it doesn&#039;t need interactive authorization.&lt;br /&gt;
[[File:AzureAllowPublicClientFlows.png|none|thumb|600x600px|/AzureAllowPublicClientFlows.png|/AzureAllowPublicClientFlows.png]]&lt;br /&gt;
Log in to the Microsoft 365 admin center (https://admin.cloud.microsoft).&lt;br /&gt;
[[File:MS365AdminCenter.png|none|thumb|600x600px|/MS365AdminCenter.png|/MS365AdminCenter.png]]&lt;br /&gt;
Make sure that Microsoft 365 licenses are assigned to your user.&lt;br /&gt;
[[File:MS365UserLicenses.png|none|thumb|600x600px|/MS365UserLicenses.png|/MS365UserLicenses.png]]&lt;br /&gt;
Set your user active.&lt;br /&gt;
[[File:MS365ActiveUsers.png|none|thumb|600x600px|/MS365ActiveUsers.png|/MS365ActiveUsers.png]]&lt;br /&gt;
Locate the Mail tab of your user.&lt;br /&gt;
[[File:MS365UserEMail.png|none|thumb|600x600px|/MS365UserEMail.png|/MS365UserEMail.png]]&lt;br /&gt;
Allow authenticated SMTP.&lt;br /&gt;
[[File:MS365AuthenticatedSMTP.png|none|thumb|600x600px|/MS365AuthenticatedSMTP.png|/MS365AuthenticatedSMTP.png]]&lt;br /&gt;
Login to the Exchange admin center (&amp;lt;nowiki&amp;gt;https://admin.exchange.microsoft.com&amp;lt;/nowiki&amp;gt;).&lt;br /&gt;
[[File:ExchangeAdminCenter.png|none|thumb|600x600px|/ExchangeAdminCenter.png|/ExchangeAdminCenter.png]]&lt;br /&gt;
Remove deactivation of the SMTP AUTH protocol.&lt;br /&gt;
[[File:ExchangeRemoveDeavtivatedOAuth2.png|none|thumb|600x600px|/ExchangeRemoveDeavtivatedOAuth2.png|/ExchangeRemoveDeavtivatedOAuth2.png]]&lt;br /&gt;
With this Microsoft setup the OAuth2 configuration for the resource owner password credentials flow can be filled in as follows. &lt;br /&gt;
[[File:OAuth2ResourceOwnerPasswordCredentials.png|none|thumb|600x600px|/OAuth2ResourceOwnerPasswordCredentials.png|/OAuth2ResourceOwnerPasswordCredentials.png]]&lt;br /&gt;
For interactive authorization this is the OAuth2 configuration. Authorize e-mail access one time and send a test mail to verify everything went well.&lt;br /&gt;
[[File:OAuth2InteractiveAuthorization.png|none|thumb|600x600px|/OAuth2InteractiveAuthorization.png|/OAuth2InteractiveAuthorization.png]]&lt;br /&gt;
&lt;br /&gt;
== Gmail ==&lt;br /&gt;
Login to the Google Cloud Console (https://console.cloud.google.com), select a project, New project.&lt;br /&gt;
[[File:GoogleSelectProject.png|none|thumb|600x600px|/GoogleSelectProject.png|/GoogleSelectProject.png]]&lt;br /&gt;
Create the project.&lt;br /&gt;
[[File:GoogleCreateProject.png|none|thumb|600x600px|/GoogleCreateProject.png|/GoogleCreateProject.png]]&lt;br /&gt;
Client credentials will be created in this project.&lt;br /&gt;
[[File:GoogleProjectCreated.png|none|thumb|600x600px|/GoogleProjectCreated.png|/GoogleProjectCreated.png]]&lt;br /&gt;
From the library specify the APIs needed to access.&lt;br /&gt;
[[File:GoogleApisServicesFromLibrary.png|none|thumb|600x600px|/GoogleApisServicesFromLibrary.png|/GoogleApisServicesFromLibrary.png]]&lt;br /&gt;
These are in the Gmail API.&lt;br /&gt;
[[File:GoogleApisServicesApiLibrary.png|none|thumb|600x600px|/GoogleApisServicesApiLibrary.png|/GoogleApisServicesApiLibrary.png]]&lt;br /&gt;
Choose the Gmail API and enable it.&lt;br /&gt;
[[File:GoogleGmailApis.png|none|thumb|600x600px|/GoogleGmailApis.png|/GoogleGmailApis.png]]&lt;br /&gt;
Credentials need to be created.&lt;br /&gt;
[[File:GoogleGmailApiAdded.png|none|thumb|600x600px|/GoogleGmailApiAdded.png|/GoogleGmailApiAdded.png]]&lt;br /&gt;
Invoke the help me choose wizard.&lt;br /&gt;
[[File:GoogleCreateCredentialsHelpMeChoose.png|none|thumb|600x600px|/GoogleCreateCredentialsHelpMeChoose.png|/GoogleCreateCredentialsHelpMeChoose.png]]&lt;br /&gt;
User data access is needed.&lt;br /&gt;
[[File:GoogleCredentialsUserData.png|none|thumb|600x600px|/GoogleCredentialsUserData.png|/GoogleCredentialsUserData.png]]&lt;br /&gt;
Configure the consent screen of the interactive authorization.&lt;br /&gt;
[[File:GoogleOAuthConsentScreen.png|none|thumb|600x600px|/GoogleOAuthConsentScreen.png|/GoogleOAuthConsentScreen.png]]&lt;br /&gt;
Specify the permissions that need to be authorized by the user.&lt;br /&gt;
[[File:GoogleOAuthScopes.png|none|thumb|600x600px|/GoogleOAuthScopes.png|/GoogleOAuthScopes.png]]&lt;br /&gt;
Its mail.google.com in general.&lt;br /&gt;
[[File:GoogleScopeMailGoogleCom.png|none|thumb|600x600px|/GoogleScopeMailGoogleCom.png|/GoogleScopeMailGoogleCom.png]]&lt;br /&gt;
And its to send email on the users behalf.&lt;br /&gt;
[[File:GoogleScopeAuthGmailSend.png|none|thumb|600x600px|/GoogleScopeAuthGmailSend.png|/GoogleScopeAuthGmailSend.png]]&lt;br /&gt;
These are the scopes needed.&lt;br /&gt;
[[File:GoogleScopes.png|none|thumb|600x600px|/GoogleScopes.png|/GoogleScopes.png]]&lt;br /&gt;
Ask client credentials for Web type application.&lt;br /&gt;
[[File:GoogleOAuthClientID.png|none|thumb|600x600px|/GoogleOAuthClientID.png|/GoogleOAuthClientID.png]]&lt;br /&gt;
Tell all redirect URIs that the PBX and the apps will be using during interactive authorization.&lt;br /&gt;
[[File:GoogleRedirectURIs.png|none|thumb|600x600px|/GoogleRedirectURIs.png|/GoogleRedirectURIs.png]]&lt;br /&gt;
Download the credentials. This json file contains all information for OAuth2 configuration.&lt;br /&gt;
[[File:GoogleClientCredentialsDownload.png|none|thumb|600x600px|/GoogleClientCredentialsDownload.png|/GoogleClientCredentialsDownload.png]]&lt;br /&gt;
Customize the OAuth consent screen&lt;br /&gt;
[[File:GoogleOAuthConsentScreenSettings.png|none|thumb|600x600px|/GoogleOAuthConsentScreenSettings.png|/GoogleOAuthConsentScreenSettings.png]]&lt;br /&gt;
Start the customization wizard.&lt;br /&gt;
[[File:GoogleConsentScreenWizard.png|none|thumb|600x600px|/GoogleConsentScreenWizard.png|/GoogleConsentScreenWizard.png]]&lt;br /&gt;
Choose which users may authorize.&lt;br /&gt;
[[File:GoogleAudienceExternal.png|none|thumb|600x600px|/GoogleAudienceExternal.png|/GoogleAudienceExternal.png]]&lt;br /&gt;
Google workspace users may choose internal audience. Users not in Google workspace proceed with external.&lt;br /&gt;
[[File:GoogleContactInformation.png|none|thumb|600x600px|/GoogleContactInformation.png|/GoogleContactInformation.png]]&lt;br /&gt;
Add a test user.&lt;br /&gt;
[[File:GoogleTestUserAdded.png|none|thumb|600x600px|/GoogleTestUserAdded.png|/GoogleTestUserAdded.png]]&lt;br /&gt;
The OAuth2 parameters can be filled in with the information from the json file downloaded above.&lt;br /&gt;
[[File:OAuth2InteractiveGmail.png|none|thumb|600x600px|/OAuth2InteractiveGmail.png|/OAuth2InteractiveGmail.png]]&lt;br /&gt;
&lt;br /&gt;
== Generic ==&lt;br /&gt;
&lt;br /&gt;
1&lt;br /&gt;
[[File:OAuth2ClientSecretPost.png|none|thumb|600x600px|/OAuth2ClientSecretPost.png]]&lt;br /&gt;
2&lt;br /&gt;
&lt;br /&gt;
3&lt;/div&gt;</summary>
		<author><name>Tmo</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Howto16r1:Configure_OAuth2_E-Mail&amp;diff=78146</id>
		<title>Howto16r1:Configure OAuth2 E-Mail</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Howto16r1:Configure_OAuth2_E-Mail&amp;diff=78146"/>
		<updated>2025-10-03T07:58:10Z</updated>

		<summary type="html">&lt;p&gt;Tmo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{FIXME|reason=This product is in the beta phase and is not yet finished}}&lt;br /&gt;
[[File:OAuth2ClientSecretPost.png|none|thumb|600x600px]]&lt;br /&gt;
innovaphone PBX and apps can be configured to send E-Mails for various subjects and purposes. Major E-Mail providers intent to discontinue the username/password authentication schemes in favour of OAuth2. PBX and Apps version 16r1 does support OAuth2 authentication for SMTP. Here is a step by step guide how to set up OAuth2 support in Microsoft 365 through the Azure Portal and how to set it up on a Google Gmail account in the Google Cloud Console.&lt;br /&gt;
&lt;br /&gt;
== Microsoft 365 ==&lt;br /&gt;
Log in to Microsoft Azure Portal (&amp;lt;nowiki&amp;gt;https://portal.azure.com&amp;lt;/nowiki&amp;gt;) and go to Microsoft Entra ID.&lt;br /&gt;
[[File:AzureMicrosoftEntraID.png|none|thumb|600x600px|/AzureMicrosoftEntraID.png|/AzureMicrosoftEntraID.png]]&lt;br /&gt;
Add a new app registration to create client credentials.&lt;br /&gt;
[[File:AzureAddAppRegistration.png|none|thumb|600x600px|/AzureAddAppRegistration.png|/AzureAddAppRegistration.png]]&lt;br /&gt;
Register the application and maybe already fill in the redirect URI for Web based application type to path OAUTH2-CLIENT/auth.htm at the PBX.&lt;br /&gt;
[[File:AzureRegisterAnApplication.png|none|thumb|600x600px|/AzureRegisterAnApplication.png|/AzureRegisterAnApplication.png]]&lt;br /&gt;
App registration is complete. Client ID and tenant needs to be configured at the PBX and every app that will be sending e-mails.&lt;br /&gt;
[[File:AzureApp.png|none|thumb|600x600px|/AzureApp.png|/AzureApp.png]]&lt;br /&gt;
Create a client secret.&lt;br /&gt;
[[File:AzureAddClientSecret.png|none|thumb|600x600px|/AzureAddClientSecret.png|/AzureAddClientSecret.png]]&lt;br /&gt;
Copy the client secret. It also needs to be configured at the PBX and every app that will be sending e-mails.&lt;br /&gt;
[[File:AzureCopyClientSecret.png|none|thumb|600x600px|/AzureCopyClientSecret.png|/AzureCopyClientSecret.png]]&lt;br /&gt;
Add permissions located in APIs my organization uses.&lt;br /&gt;
[[File:AzureAddApiPermissionMyOrganization.png|none|thumb|600x600px|/AzureAddApiPermissionMyOrganization.png|/AzureAddApiPermissionMyOrganization.png]]&lt;br /&gt;
More precisely located in Office 365 Exchange Online.&lt;br /&gt;
[[File:AzureAddApiPermissionExchange.png|none|thumb|600x600px|/AzureAddApiPermissionExchange.png|/AzureAddApiPermissionExchange.png]]&lt;br /&gt;
And there in the application permissions.&lt;br /&gt;
[[File:AzureAddApiExchangeApplication.png|none|thumb|600x600px|/AzureAddApiExchangeApplication.png|/AzureAddApiExchangeApplication.png]]&lt;br /&gt;
Namely SMTP Mail.Send.&lt;br /&gt;
[[File:AzureAddApiSendMailAsUser.png|none|thumb|600x600px|/AzureAddApiSendMailAsUser.png|/AzureAddApiSendMailAsUser.png]]&lt;br /&gt;
Grant admin permission for Mail.Send.&lt;br /&gt;
[[File:AzureGrantApiPermissions.png|none|thumb|600x600px|/AzureGrantApiPermissions.png|/AzureGrantApiPermissions.png]]&lt;br /&gt;
API permissions are now granted.&lt;br /&gt;
[[File:AzureApiPermissionsGranted.png|none|thumb|600x600px|/AzureApiPermissionsGranted.png|/AzureApiPermissionsGranted.png]]&lt;br /&gt;
Tell all redirect URIs that the PBX and the apps will be using during interactive authorization.&lt;br /&gt;
[[File:AzureRedirectUris.png|none|thumb|600x600px|/AzureRedirectUris.png|/AzureRedirectUris.png]]&lt;br /&gt;
Allow public client flows of OAuth2. Resource Owner Password Credentials Flow has the advantage that it doesn&#039;t need interactive authorization.&lt;br /&gt;
[[File:AzureAllowPublicClientFlows.png|none|thumb|600x600px|/AzureAllowPublicClientFlows.png|/AzureAllowPublicClientFlows.png]]&lt;br /&gt;
Log in to the Microsoft 365 admin center (https://admin.cloud.microsoft).&lt;br /&gt;
[[File:MS365AdminCenter.png|none|thumb|600x600px|/MS365AdminCenter.png|/MS365AdminCenter.png]]&lt;br /&gt;
Make sure that Microsoft 365 licenses are assigned to your user.&lt;br /&gt;
[[File:MS365UserLicenses.png|none|thumb|600x600px|/MS365UserLicenses.png|/MS365UserLicenses.png]]&lt;br /&gt;
Set your user active.&lt;br /&gt;
[[File:MS365ActiveUsers.png|none|thumb|600x600px|/MS365ActiveUsers.png|/MS365ActiveUsers.png]]&lt;br /&gt;
Locate the Mail tab of your user.&lt;br /&gt;
[[File:MS365UserEMail.png|none|thumb|600x600px|/MS365UserEMail.png|/MS365UserEMail.png]]&lt;br /&gt;
Allow authenticated SMTP.&lt;br /&gt;
[[File:MS365AuthenticatedSMTP.png|none|thumb|600x600px|/MS365AuthenticatedSMTP.png|/MS365AuthenticatedSMTP.png]]&lt;br /&gt;
Login to the Exchange admin center (&amp;lt;nowiki&amp;gt;https://admin.exchange.microsoft.com&amp;lt;/nowiki&amp;gt;).&lt;br /&gt;
[[File:ExchangeAdminCenter.png|none|thumb|600x600px|/ExchangeAdminCenter.png|/ExchangeAdminCenter.png]]&lt;br /&gt;
Remove deactivation of the SMTP AUTH protocol.&lt;br /&gt;
[[File:ExchangeRemoveDeavtivatedOAuth2.png|none|thumb|600x600px|/ExchangeRemoveDeavtivatedOAuth2.png|/ExchangeRemoveDeavtivatedOAuth2.png]]&lt;br /&gt;
With this Microsoft setup the OAuth2 configuration for the resource owner password credentials flow can be filled in as follows. &lt;br /&gt;
[[File:OAuth2ResourceOwnerPasswordCredentials.png|none|thumb|600x600px|/OAuth2ResourceOwnerPasswordCredentials.png|/OAuth2ResourceOwnerPasswordCredentials.png]]&lt;br /&gt;
For interactive authorization this is the OAuth2 configuration. Authorize e-mail access one time and send a test mail to verify everything went well.&lt;br /&gt;
[[File:OAuth2InteractiveAuthorization.png|none|thumb|600x600px|/OAuth2InteractiveAuthorization.png|/OAuth2InteractiveAuthorization.png]]&lt;br /&gt;
&lt;br /&gt;
== Gmail ==&lt;br /&gt;
Login to the Google Cloud Console (https://console.cloud.google.com), select a project, New project.&lt;br /&gt;
[[File:GoogleSelectProject.png|none|thumb|600x600px|/GoogleSelectProject.png|/GoogleSelectProject.png]]&lt;br /&gt;
Create the project.&lt;br /&gt;
[[File:GoogleCreateProject.png|none|thumb|600x600px|/GoogleCreateProject.png|/GoogleCreateProject.png]]&lt;br /&gt;
Client credentials will be created in this project.&lt;br /&gt;
[[File:GoogleProjectCreated.png|none|thumb|600x600px|/GoogleProjectCreated.png|/GoogleProjectCreated.png]]&lt;br /&gt;
From the library specify the APIs needed to access.&lt;br /&gt;
[[File:GoogleApisServicesFromLibrary.png|none|thumb|600x600px|/GoogleApisServicesFromLibrary.png|/GoogleApisServicesFromLibrary.png]]&lt;br /&gt;
These are in the Gmail API.&lt;br /&gt;
[[File:GoogleApisServicesApiLibrary.png|none|thumb|600x600px|/GoogleApisServicesApiLibrary.png|/GoogleApisServicesApiLibrary.png]]&lt;br /&gt;
Choose the Gmail API and enable it.&lt;br /&gt;
[[File:GoogleGmailApis.png|none|thumb|600x600px|/GoogleGmailApis.png|/GoogleGmailApis.png]]&lt;br /&gt;
Credentials need to be created.&lt;br /&gt;
[[File:GoogleGmailApiAdded.png|none|thumb|600x600px|/GoogleGmailApiAdded.png|/GoogleGmailApiAdded.png]]&lt;br /&gt;
Invoke the help me choose wizard.&lt;br /&gt;
[[File:GoogleCreateCredentialsHelpMeChoose.png|none|thumb|600x600px|/GoogleCreateCredentialsHelpMeChoose.png|/GoogleCreateCredentialsHelpMeChoose.png]]&lt;br /&gt;
User data access is needed.&lt;br /&gt;
[[File:GoogleCredentialsUserData.png|none|thumb|600x600px|/GoogleCredentialsUserData.png|/GoogleCredentialsUserData.png]]&lt;br /&gt;
Configure the consent screen of the interactive authorization.&lt;br /&gt;
[[File:GoogleOAuthConsentScreen.png|none|thumb|600x600px|/GoogleOAuthConsentScreen.png|/GoogleOAuthConsentScreen.png]]&lt;br /&gt;
Specify the permissions that need to be authorized by the user.&lt;br /&gt;
[[File:GoogleOAuthScopes.png|none|thumb|600x600px|/GoogleOAuthScopes.png|/GoogleOAuthScopes.png]]&lt;br /&gt;
Its mail.google.com in general.&lt;br /&gt;
[[File:GoogleScopeMailGoogleCom.png|none|thumb|600x600px|/GoogleScopeMailGoogleCom.png|/GoogleScopeMailGoogleCom.png]]&lt;br /&gt;
And its to send email on the users behalf.&lt;br /&gt;
[[File:GoogleScopeAuthGmailSend.png|none|thumb|600x600px|/GoogleScopeAuthGmailSend.png|/GoogleScopeAuthGmailSend.png]]&lt;br /&gt;
These are the scopes needed.&lt;br /&gt;
[[File:GoogleScopes.png|none|thumb|600x600px|/GoogleScopes.png|/GoogleScopes.png]]&lt;br /&gt;
Ask client credentials for Web type application.&lt;br /&gt;
[[File:GoogleOAuthClientID.png|none|thumb|600x600px|/GoogleOAuthClientID.png|/GoogleOAuthClientID.png]]&lt;br /&gt;
Tell all redirect URIs that the PBX and the apps will be using during interactive authorization.&lt;br /&gt;
[[File:GoogleRedirectURIs.png|none|thumb|600x600px|/GoogleRedirectURIs.png|/GoogleRedirectURIs.png]]&lt;br /&gt;
Download the credentials. This json file contains all information for OAuth2 configuration.&lt;br /&gt;
[[File:GoogleClientCredentialsDownload.png|none|thumb|600x600px|/GoogleClientCredentialsDownload.png|/GoogleClientCredentialsDownload.png]]&lt;br /&gt;
Customize the OAuth consent screen&lt;br /&gt;
[[File:GoogleOAuthConsentScreenSettings.png|none|thumb|600x600px|/GoogleOAuthConsentScreenSettings.png|/GoogleOAuthConsentScreenSettings.png]]&lt;br /&gt;
Start the customization wizard.&lt;br /&gt;
[[File:GoogleConsentScreenWizard.png|none|thumb|600x600px|/GoogleConsentScreenWizard.png|/GoogleConsentScreenWizard.png]]&lt;br /&gt;
Choose which users may authorize.&lt;br /&gt;
[[File:GoogleAudienceExternal.png|none|thumb|600x600px|/GoogleAudienceExternal.png|/GoogleAudienceExternal.png]]&lt;br /&gt;
Google workspace users may choose internal audience. Users not in Google workspace proceed with external.&lt;br /&gt;
[[File:GoogleContactInformation.png|none|thumb|600x600px|/GoogleContactInformation.png|/GoogleContactInformation.png]]&lt;br /&gt;
Add a test user.&lt;br /&gt;
[[File:GoogleTestUserAdded.png|none|thumb|600x600px|/GoogleTestUserAdded.png|/GoogleTestUserAdded.png]]&lt;br /&gt;
The OAuth2 parameters can be filled in with the information from the json file downloaded above.&lt;br /&gt;
[[File:OAuth2InteractiveGmail.png|none|thumb|600x600px|/OAuth2InteractiveGmail.png|/OAuth2InteractiveGmail.png]]&lt;br /&gt;
&lt;br /&gt;
== Generic ==&lt;br /&gt;
&lt;br /&gt;
1&lt;br /&gt;
&lt;br /&gt;
2&lt;br /&gt;
&lt;br /&gt;
3&lt;/div&gt;</summary>
		<author><name>Tmo</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=File:OAuth2ClientSecretPost.png&amp;diff=78145</id>
		<title>File:OAuth2ClientSecretPost.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=File:OAuth2ClientSecretPost.png&amp;diff=78145"/>
		<updated>2025-10-03T07:57:49Z</updated>

		<summary type="html">&lt;p&gt;Tmo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;OAuth2 Client Secret Post&lt;/div&gt;</summary>
		<author><name>Tmo</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Howto16r1:Configure_OAuth2_E-Mail&amp;diff=78144</id>
		<title>Howto16r1:Configure OAuth2 E-Mail</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Howto16r1:Configure_OAuth2_E-Mail&amp;diff=78144"/>
		<updated>2025-10-03T07:51:29Z</updated>

		<summary type="html">&lt;p&gt;Tmo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{FIXME|reason=This product is in the beta phase and is not yet finished}}&lt;br /&gt;
&lt;br /&gt;
innovaphone PBX and apps can be configured to send E-Mails for various subjects and purposes. Major E-Mail providers intent to discontinue the username/password authentication schemes in favour of OAuth2. PBX and Apps version 16r1 does support OAuth2 authentication for SMTP. Here is a step by step guide how to set up OAuth2 support in Microsoft 365 through the Azure Portal and how to set it up on a Google Gmail account in the Google Cloud Console.&lt;br /&gt;
&lt;br /&gt;
== Microsoft 365 ==&lt;br /&gt;
Log in to Microsoft Azure Portal (&amp;lt;nowiki&amp;gt;https://portal.azure.com&amp;lt;/nowiki&amp;gt;) and go to Microsoft Entra ID.&lt;br /&gt;
[[File:AzureMicrosoftEntraID.png|none|thumb|600x600px|/AzureMicrosoftEntraID.png|/AzureMicrosoftEntraID.png]]&lt;br /&gt;
Add a new app registration to create client credentials.&lt;br /&gt;
[[File:AzureAddAppRegistration.png|none|thumb|600x600px|/AzureAddAppRegistration.png|/AzureAddAppRegistration.png]]&lt;br /&gt;
Register the application and maybe already fill in the redirect URI for Web based application type to path OAUTH2-CLIENT/auth.htm at the PBX.&lt;br /&gt;
[[File:AzureRegisterAnApplication.png|none|thumb|600x600px|/AzureRegisterAnApplication.png|/AzureRegisterAnApplication.png]]&lt;br /&gt;
App registration is complete. Client ID and tenant needs to be configured at the PBX and every app that will be sending e-mails.&lt;br /&gt;
[[File:AzureApp.png|none|thumb|600x600px|/AzureApp.png|/AzureApp.png]]&lt;br /&gt;
Create a client secret.&lt;br /&gt;
[[File:AzureAddClientSecret.png|none|thumb|600x600px|/AzureAddClientSecret.png|/AzureAddClientSecret.png]]&lt;br /&gt;
Copy the client secret. It also needs to be configured at the PBX and every app that will be sending e-mails.&lt;br /&gt;
[[File:AzureCopyClientSecret.png|none|thumb|600x600px|/AzureCopyClientSecret.png|/AzureCopyClientSecret.png]]&lt;br /&gt;
Add permissions located in APIs my organization uses.&lt;br /&gt;
[[File:AzureAddApiPermissionMyOrganization.png|none|thumb|600x600px|/AzureAddApiPermissionMyOrganization.png|/AzureAddApiPermissionMyOrganization.png]]&lt;br /&gt;
More precisely located in Office 365 Exchange Online.&lt;br /&gt;
[[File:AzureAddApiPermissionExchange.png|none|thumb|600x600px|/AzureAddApiPermissionExchange.png|/AzureAddApiPermissionExchange.png]]&lt;br /&gt;
And there in the application permissions.&lt;br /&gt;
[[File:AzureAddApiExchangeApplication.png|none|thumb|600x600px|/AzureAddApiExchangeApplication.png|/AzureAddApiExchangeApplication.png]]&lt;br /&gt;
Namely SMTP Mail.Send.&lt;br /&gt;
[[File:AzureAddApiSendMailAsUser.png|none|thumb|600x600px|/AzureAddApiSendMailAsUser.png|/AzureAddApiSendMailAsUser.png]]&lt;br /&gt;
Grant admin permission for Mail.Send.&lt;br /&gt;
[[File:AzureGrantApiPermissions.png|none|thumb|600x600px|/AzureGrantApiPermissions.png|/AzureGrantApiPermissions.png]]&lt;br /&gt;
API permissions are now granted.&lt;br /&gt;
[[File:AzureApiPermissionsGranted.png|none|thumb|600x600px|/AzureApiPermissionsGranted.png|/AzureApiPermissionsGranted.png]]&lt;br /&gt;
Tell all redirect URIs that the PBX and the apps will be using during interactive authorization.&lt;br /&gt;
[[File:AzureRedirectUris.png|none|thumb|600x600px|/AzureRedirectUris.png|/AzureRedirectUris.png]]&lt;br /&gt;
Allow public client flows of OAuth2. Resource Owner Password Credentials Flow has the advantage that it doesn&#039;t need interactive authorization.&lt;br /&gt;
[[File:AzureAllowPublicClientFlows.png|none|thumb|600x600px|/AzureAllowPublicClientFlows.png|/AzureAllowPublicClientFlows.png]]&lt;br /&gt;
Log in to the Microsoft 365 admin center (https://admin.cloud.microsoft).&lt;br /&gt;
[[File:MS365AdminCenter.png|none|thumb|600x600px|/MS365AdminCenter.png|/MS365AdminCenter.png]]&lt;br /&gt;
Make sure that Microsoft 365 licenses are assigned to your user.&lt;br /&gt;
[[File:MS365UserLicenses.png|none|thumb|600x600px|/MS365UserLicenses.png|/MS365UserLicenses.png]]&lt;br /&gt;
Set your user active.&lt;br /&gt;
[[File:MS365ActiveUsers.png|none|thumb|600x600px|/MS365ActiveUsers.png|/MS365ActiveUsers.png]]&lt;br /&gt;
Locate the Mail tab of your user.&lt;br /&gt;
[[File:MS365UserEMail.png|none|thumb|600x600px|/MS365UserEMail.png|/MS365UserEMail.png]]&lt;br /&gt;
Allow authenticated SMTP.&lt;br /&gt;
[[File:MS365AuthenticatedSMTP.png|none|thumb|600x600px|/MS365AuthenticatedSMTP.png|/MS365AuthenticatedSMTP.png]]&lt;br /&gt;
Login to the Exchange admin center (&amp;lt;nowiki&amp;gt;https://admin.exchange.microsoft.com&amp;lt;/nowiki&amp;gt;).&lt;br /&gt;
[[File:ExchangeAdminCenter.png|none|thumb|600x600px|/ExchangeAdminCenter.png|/ExchangeAdminCenter.png]]&lt;br /&gt;
Remove deactivation of the SMTP AUTH protocol.&lt;br /&gt;
[[File:ExchangeRemoveDeavtivatedOAuth2.png|none|thumb|600x600px|/ExchangeRemoveDeavtivatedOAuth2.png|/ExchangeRemoveDeavtivatedOAuth2.png]]&lt;br /&gt;
With this Microsoft setup the OAuth2 configuration for the resource owner password credentials flow can be filled in as follows. &lt;br /&gt;
[[File:OAuth2ResourceOwnerPasswordCredentials.png|none|thumb|600x600px|/OAuth2ResourceOwnerPasswordCredentials.png|/OAuth2ResourceOwnerPasswordCredentials.png]]&lt;br /&gt;
For interactive authorization this is the OAuth2 configuration. Authorize e-mail access one time and send a test mail to verify everything went well.&lt;br /&gt;
[[File:OAuth2InteractiveAuthorization.png|none|thumb|600x600px|/OAuth2InteractiveAuthorization.png|/OAuth2InteractiveAuthorization.png]]&lt;br /&gt;
&lt;br /&gt;
== Gmail ==&lt;br /&gt;
Login to the Google Cloud Console (https://console.cloud.google.com), select a project, New project.&lt;br /&gt;
[[File:GoogleSelectProject.png|none|thumb|600x600px|/GoogleSelectProject.png|/GoogleSelectProject.png]]&lt;br /&gt;
Create the project.&lt;br /&gt;
[[File:GoogleCreateProject.png|none|thumb|600x600px|/GoogleCreateProject.png|/GoogleCreateProject.png]]&lt;br /&gt;
Client credentials will be created in this project.&lt;br /&gt;
[[File:GoogleProjectCreated.png|none|thumb|600x600px|/GoogleProjectCreated.png|/GoogleProjectCreated.png]]&lt;br /&gt;
From the library specify the APIs needed to access.&lt;br /&gt;
[[File:GoogleApisServicesFromLibrary.png|none|thumb|600x600px|/GoogleApisServicesFromLibrary.png|/GoogleApisServicesFromLibrary.png]]&lt;br /&gt;
These are in the Gmail API.&lt;br /&gt;
[[File:GoogleApisServicesApiLibrary.png|none|thumb|600x600px|/GoogleApisServicesApiLibrary.png|/GoogleApisServicesApiLibrary.png]]&lt;br /&gt;
Choose the Gmail API and enable it.&lt;br /&gt;
[[File:GoogleGmailApis.png|none|thumb|600x600px|/GoogleGmailApis.png|/GoogleGmailApis.png]]&lt;br /&gt;
Credentials need to be created.&lt;br /&gt;
[[File:GoogleGmailApiAdded.png|none|thumb|600x600px|/GoogleGmailApiAdded.png|/GoogleGmailApiAdded.png]]&lt;br /&gt;
Invoke the help me choose wizard.&lt;br /&gt;
[[File:GoogleCreateCredentialsHelpMeChoose.png|none|thumb|600x600px|/GoogleCreateCredentialsHelpMeChoose.png|/GoogleCreateCredentialsHelpMeChoose.png]]&lt;br /&gt;
User data access is needed.&lt;br /&gt;
[[File:GoogleCredentialsUserData.png|none|thumb|600x600px|/GoogleCredentialsUserData.png|/GoogleCredentialsUserData.png]]&lt;br /&gt;
Configure the consent screen of the interactive authorization.&lt;br /&gt;
[[File:GoogleOAuthConsentScreen.png|none|thumb|600x600px|/GoogleOAuthConsentScreen.png|/GoogleOAuthConsentScreen.png]]&lt;br /&gt;
Specify the permissions that need to be authorized by the user.&lt;br /&gt;
[[File:GoogleOAuthScopes.png|none|thumb|600x600px|/GoogleOAuthScopes.png|/GoogleOAuthScopes.png]]&lt;br /&gt;
Its mail.google.com in general.&lt;br /&gt;
[[File:GoogleScopeMailGoogleCom.png|none|thumb|600x600px|/GoogleScopeMailGoogleCom.png|/GoogleScopeMailGoogleCom.png]]&lt;br /&gt;
And its to send email on the users behalf.&lt;br /&gt;
[[File:GoogleScopeAuthGmailSend.png|none|thumb|600x600px|/GoogleScopeAuthGmailSend.png|/GoogleScopeAuthGmailSend.png]]&lt;br /&gt;
These are the scopes needed.&lt;br /&gt;
[[File:GoogleScopes.png|none|thumb|600x600px|/GoogleScopes.png|/GoogleScopes.png]]&lt;br /&gt;
Ask client credentials for Web type application.&lt;br /&gt;
[[File:GoogleOAuthClientID.png|none|thumb|600x600px|/GoogleOAuthClientID.png|/GoogleOAuthClientID.png]]&lt;br /&gt;
Tell all redirect URIs that the PBX and the apps will be using during interactive authorization.&lt;br /&gt;
[[File:GoogleRedirectURIs.png|none|thumb|600x600px|/GoogleRedirectURIs.png|/GoogleRedirectURIs.png]]&lt;br /&gt;
Download the credentials. This json file contains all information for OAuth2 configuration.&lt;br /&gt;
[[File:GoogleClientCredentialsDownload.png|none|thumb|600x600px|/GoogleClientCredentialsDownload.png|/GoogleClientCredentialsDownload.png]]&lt;br /&gt;
Customize the OAuth consent screen&lt;br /&gt;
[[File:GoogleOAuthConsentScreenSettings.png|none|thumb|600x600px|/GoogleOAuthConsentScreenSettings.png|/GoogleOAuthConsentScreenSettings.png]]&lt;br /&gt;
Start the customization wizard.&lt;br /&gt;
[[File:GoogleConsentScreenWizard.png|none|thumb|600x600px|/GoogleConsentScreenWizard.png|/GoogleConsentScreenWizard.png]]&lt;br /&gt;
Choose which users may authorize.&lt;br /&gt;
[[File:GoogleAudienceExternal.png|none|thumb|600x600px|/GoogleAudienceExternal.png|/GoogleAudienceExternal.png]]&lt;br /&gt;
Google workspace users may choose internal audience. Users not in Google workspace proceed with external.&lt;br /&gt;
[[File:GoogleContactInformation.png|none|thumb|600x600px|/GoogleContactInformation.png|/GoogleContactInformation.png]]&lt;br /&gt;
Add a test user.&lt;br /&gt;
[[File:GoogleTestUserAdded.png|none|thumb|600x600px|/GoogleTestUserAdded.png|/GoogleTestUserAdded.png]]&lt;br /&gt;
The OAuth2 parameters can be filled in with the information from the json file downloaded above.&lt;br /&gt;
[[File:OAuth2InteractiveGmail.png|none|thumb|600x600px|/OAuth2InteractiveGmail.png|/OAuth2InteractiveGmail.png]]&lt;br /&gt;
&lt;br /&gt;
== Generic ==&lt;br /&gt;
&lt;br /&gt;
1&lt;br /&gt;
&lt;br /&gt;
2&lt;br /&gt;
&lt;br /&gt;
3&lt;/div&gt;</summary>
		<author><name>Tmo</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Howto16r1:Configure_OAuth2_E-Mail&amp;diff=78143</id>
		<title>Howto16r1:Configure OAuth2 E-Mail</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Howto16r1:Configure_OAuth2_E-Mail&amp;diff=78143"/>
		<updated>2025-10-03T07:50:22Z</updated>

		<summary type="html">&lt;p&gt;Tmo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{FIXME|reason=This product is in the beta phase and is not yet finished}}&lt;br /&gt;
&lt;br /&gt;
innovaphone PBX and apps can be configured to send E-Mails for various subjects and purposes. Major E-Mail providers intent to discontinue the username/password authentication schemes in favour of OAuth2. PBX and Apps version 16r1 does support OAuth2 authentication for SMTP. Here is a step by step guide how to set up OAuth2 support in Microsoft 365 through the Azure Portal and how to set it up on a Google Gmail account in the Google Cloud Console.&lt;br /&gt;
&lt;br /&gt;
== Microsoft 365 ==&lt;br /&gt;
Log in to Microsoft Azure Portal (&amp;lt;nowiki&amp;gt;https://portal.azure.com&amp;lt;/nowiki&amp;gt;) and go to Microsoft Entra ID.&lt;br /&gt;
[[File:AzureMicrosoftEntraID.png|none|thumb|600x600px|/AzureMicrosoftEntraID.png|/AzureMicrosoftEntraID.png]]&lt;br /&gt;
Add a new app registration to create client credentials.&lt;br /&gt;
[[File:AzureAddAppRegistration.png|none|thumb|600x600px|/AzureAddAppRegistration.png|/AzureAddAppRegistration.png]]&lt;br /&gt;
Register the application and maybe already fill in the redirect URI for Web based application type to path OAUTH2-CLIENT/auth.htm at the PBX.&lt;br /&gt;
[[File:AzureRegisterAnApplication.png|none|thumb|600x600px|/AzureRegisterAnApplication.png|/AzureRegisterAnApplication.png]]&lt;br /&gt;
App registration is complete. Client ID and tenant needs to be configured at the PBX and every app that will be sending e-mails.&lt;br /&gt;
[[File:AzureApp.png|none|thumb|600x600px|/AzureApp.png|/AzureApp.png]]&lt;br /&gt;
Create a client secret.&lt;br /&gt;
[[File:AzureAddClientSecret.png|none|thumb|600x600px|/AzureAddClientSecret.png|/AzureAddClientSecret.png]]&lt;br /&gt;
Copy the client secret. It also needs to be configured at the PBX and every app that will be sending e-mails.&lt;br /&gt;
[[File:AzureCopyClientSecret.png|none|thumb|600x600px|/AzureCopyClientSecret.png|/AzureCopyClientSecret.png]]&lt;br /&gt;
Add permissions located in APIs my organization uses.&lt;br /&gt;
[[File:AzureAddApiPermissionMyOrganization.png|none|thumb|600x600px|/AzureAddApiPermissionMyOrganization.png|/AzureAddApiPermissionMyOrganization.png]]&lt;br /&gt;
More precisely located in Office 365 Exchange Online.&lt;br /&gt;
[[File:AzureAddApiPermissionExchange.png|none|thumb|600x600px|/AzureAddApiPermissionExchange.png|/AzureAddApiPermissionExchange.png]]&lt;br /&gt;
And there in the application permissions.&lt;br /&gt;
[[File:AzureAddApiExchangeApplication.png|none|thumb|600x600px|/AzureAddApiExchangeApplication.png|/AzureAddApiExchangeApplication.png]]&lt;br /&gt;
Namely SMTP Mail.Send.&lt;br /&gt;
[[File:AzureAddApiSendMailAsUser.png|none|thumb|600x600px|/AzureAddApiSendMailAsUser.png|/AzureAddApiSendMailAsUser.png]]&lt;br /&gt;
Grant admin permission for Mail.Send.&lt;br /&gt;
[[File:AzureGrantApiPermissions.png|none|thumb|600x600px|/AzureGrantApiPermissions.png|/AzureGrantApiPermissions.png]]&lt;br /&gt;
API permissions are now granted.&lt;br /&gt;
[[File:AzureApiPermissionsGranted.png|none|thumb|600x600px|/AzureApiPermissionsGranted.png|/AzureApiPermissionsGranted.png]]&lt;br /&gt;
Tell all redirect URIs that the PBX and the apps will be using during interactive authorization.&lt;br /&gt;
[[File:AzureRedirectUris.png|none|thumb|600x600px|/AzureRedirectUris.png|/AzureRedirectUris.png]]&lt;br /&gt;
Allow public client flows of OAuth2. Resource Owner Password Credentials Flow has the advantage that it doesn&#039;t need interactive authorization.&lt;br /&gt;
[[File:AzureAllowPublicClientFlows.png|none|thumb|600x600px|/AzureAllowPublicClientFlows.png|/AzureAllowPublicClientFlows.png]]&lt;br /&gt;
Log in to the Microsoft 365 admin center (https://admin.cloud.microsoft).&lt;br /&gt;
[[File:MS365AdminCenter.png|none|thumb|600x600px|/MS365AdminCenter.png|/MS365AdminCenter.png]]&lt;br /&gt;
Make sure that Microsoft 365 licenses are assigned to your user.&lt;br /&gt;
[[File:MS365UserLicenses.png|none|thumb|600x600px|/MS365UserLicenses.png|/MS365UserLicenses.png]]&lt;br /&gt;
Set your user active.&lt;br /&gt;
[[File:MS365ActiveUsers.png|none|thumb|600x600px|/MS365ActiveUsers.png|/MS365ActiveUsers.png]]&lt;br /&gt;
Locate the Mail tab of your user.&lt;br /&gt;
[[File:MS365UserEMail.png|none|thumb|600x600px|/MS365UserEMail.png|/MS365UserEMail.png]]&lt;br /&gt;
Allow authenticated SMTP.&lt;br /&gt;
[[File:MS365AuthenticatedSMTP.png|none|thumb|600x600px|/MS365AuthenticatedSMTP.png|/MS365AuthenticatedSMTP.png]]&lt;br /&gt;
Login to the Exchange admin center (&amp;lt;nowiki&amp;gt;https://admin.exchange.microsoft.com&amp;lt;/nowiki&amp;gt;).&lt;br /&gt;
[[File:ExchangeAdminCenter.png|none|thumb|600x600px|/ExchangeAdminCenter.png|/ExchangeAdminCenter.png]]&lt;br /&gt;
Remove deactivation of the SMTP AUTH protocol.&lt;br /&gt;
[[File:ExchangeRemoveDeavtivatedOAuth2.png|none|thumb|600x600px|/ExchangeRemoveDeavtivatedOAuth2.png|/ExchangeRemoveDeavtivatedOAuth2.png]]&lt;br /&gt;
With this Microsoft setup the OAuth2 configuration for the resource owner password credentials flow can be filled in as follows. &lt;br /&gt;
[[File:OAuth2ResourceOwnerPasswordCredentials.png|none|thumb|600x600px|/OAuth2ResourceOwnerPasswordCredentials.png|/OAuth2ResourceOwnerPasswordCredentials.png]]&lt;br /&gt;
For interactive authorization this is the OAuth2 configuration. Authorize e-mail access one time and send a test mail to verify everything went well.&lt;br /&gt;
[[File:OAuth2InteractiveAuthorization.png|none|thumb|600x600px|/OAuth2InteractiveAuthorization.png|/OAuth2InteractiveAuthorization.png]]&lt;br /&gt;
&lt;br /&gt;
== Gmail ==&lt;br /&gt;
Login to the Google Cloud Console (https://console.cloud.google.com), select a project, New project.&lt;br /&gt;
[[File:GoogleSelectProject.png|none|thumb|600x600px|/GoogleSelectProject.png|/GoogleSelectProject.png]]&lt;br /&gt;
Create the project.&lt;br /&gt;
[[File:GoogleCreateProject.png|none|thumb|600x600px|/GoogleCreateProject.png|/GoogleCreateProject.png]]&lt;br /&gt;
Client credentials will be created in this project.&lt;br /&gt;
[[File:GoogleProjectCreated.png|none|thumb|600x600px|/GoogleProjectCreated.png|/GoogleProjectCreated.png]]&lt;br /&gt;
From the library specify the APIs needed to access.&lt;br /&gt;
[[File:GoogleApisServicesFromLibrary.png|none|thumb|600x600px|/GoogleApisServicesFromLibrary.png|/GoogleApisServicesFromLibrary.png]]&lt;br /&gt;
These are in the Gmail API.&lt;br /&gt;
[[File:GoogleApisServicesApiLibrary.png|none|thumb|600x600px|/GoogleApisServicesApiLibrary.png|/GoogleApisServicesApiLibrary.png]]&lt;br /&gt;
Choose the Gmail API and enable it.&lt;br /&gt;
[[File:GoogleGmailApis.png|none|thumb|600x600px|/GoogleGmailApis.png|/GoogleGmailApis.png]]&lt;br /&gt;
Credentials need to be created.&lt;br /&gt;
[[File:GoogleGmailApiAdded.png|none|thumb|600x600px|/GoogleGmailApiAdded.png|/GoogleGmailApiAdded.png]]&lt;br /&gt;
Invoke the help me choose wizard.&lt;br /&gt;
[[File:GoogleCreateCredentialsHelpMeChoose.png|none|thumb|600x600px|/GoogleCreateCredentialsHelpMeChoose.png|/GoogleCreateCredentialsHelpMeChoose.png]]&lt;br /&gt;
User data access is needed.&lt;br /&gt;
[[File:GoogleCredentialsUserData.png|none|thumb|600x600px|/GoogleCredentialsUserData.png|/GoogleCredentialsUserData.png]]&lt;br /&gt;
Configure the consent screen of the interactive authorization.&lt;br /&gt;
[[File:GoogleOAuthConsentScreen.png|none|thumb|600x600px|/GoogleOAuthConsentScreen.png|/GoogleOAuthConsentScreen.png]]&lt;br /&gt;
Specify the permissions that need to be authorized by the user.&lt;br /&gt;
[[File:GoogleOAuthScopes.png|none|thumb|600x600px|/GoogleOAuthScopes.png|/GoogleOAuthScopes.png]]&lt;br /&gt;
Its mail.google.com in general.&lt;br /&gt;
[[File:GoogleScopeMailGoogleCom.png|none|thumb|600x600px|/GoogleScopeMailGoogleCom.png|/GoogleScopeMailGoogleCom.png]]&lt;br /&gt;
And its to send email on the users behalf.&lt;br /&gt;
[[File:GoogleScopeAuthGmailSend.png|none|thumb|600x600px|/GoogleScopeAuthGmailSend.png|/GoogleScopeAuthGmailSend.png]]&lt;br /&gt;
These are the scopes needed.&lt;br /&gt;
[[File:GoogleScopes.png|none|thumb|600x600px|/GoogleScopes.png|/GoogleScopes.png]]&lt;br /&gt;
Ask client credentials for Web type application.&lt;br /&gt;
[[File:GoogleOAuthClientID.png|none|thumb|600x600px|/GoogleOAuthClientID.png|/GoogleOAuthClientID.png]]&lt;br /&gt;
Tell all redirect URIs that the PBX and the apps will be using during interactive authorization.&lt;br /&gt;
[[File:GoogleRedirectURIs.png|none|thumb|600x600px|/GoogleRedirectURIs.png|/GoogleRedirectURIs.png]]&lt;br /&gt;
Download the credentials. This json file contains all information for OAuth2 configuration.&lt;br /&gt;
[[File:GoogleClientCredentialsDownload.png|none|thumb|600x600px|/GoogleClientCredentialsDownload.png|/GoogleClientCredentialsDownload.png]]&lt;br /&gt;
Customize the OAuth consent screen&lt;br /&gt;
[[File:GoogleOAuthConsentScreenSettings.png|none|thumb|600x600px|/GoogleOAuthConsentScreenSettings.png|/GoogleOAuthConsentScreenSettings.png]]&lt;br /&gt;
Start the customization wizard.&lt;br /&gt;
[[File:GoogleConsentScreenWizard.png|none|thumb|600x600px|/GoogleConsentScreenWizard.png|/GoogleConsentScreenWizard.png]]&lt;br /&gt;
Choose which users may authorize.&lt;br /&gt;
[[File:GoogleAudienceExternal.png|none|thumb|600x600px|/GoogleAudienceExternal.png|/GoogleAudienceExternal.png]]&lt;br /&gt;
Google workspace users may choose internal audience. Users not in Google workspace proceed with external.&lt;br /&gt;
[[File:GoogleContactInformation.png|none|thumb|600x600px|/GoogleContactInformation.png|/GoogleContactInformation.png]]&lt;br /&gt;
Add a test user.&lt;br /&gt;
[[File:GoogleTestUserAdded.png|none|thumb|600x600px|/GoogleTestUserAdded.png|/GoogleTestUserAdded.png]]&lt;br /&gt;
The OAuth2 parameters can be filled in with the information from the json file downloaded above.&lt;br /&gt;
[[File:OAuth2InteractiveGmail.png|none|thumb|600x600px|/OAuth2InteractiveGmail.png|/OAuth2InteractiveGmail.png]]&lt;br /&gt;
8&lt;/div&gt;</summary>
		<author><name>Tmo</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=File:OAuth2InteractiveGmail.png&amp;diff=78142</id>
		<title>File:OAuth2InteractiveGmail.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=File:OAuth2InteractiveGmail.png&amp;diff=78142"/>
		<updated>2025-10-03T07:37:23Z</updated>

		<summary type="html">&lt;p&gt;Tmo: Tmo uploaded a new version of File:OAuth2InteractiveGmail.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;OAuth2 interactive Gmail&lt;/div&gt;</summary>
		<author><name>Tmo</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Howto16r1:Configure_OAuth2_E-Mail&amp;diff=78141</id>
		<title>Howto16r1:Configure OAuth2 E-Mail</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Howto16r1:Configure_OAuth2_E-Mail&amp;diff=78141"/>
		<updated>2025-10-03T07:33:52Z</updated>

		<summary type="html">&lt;p&gt;Tmo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{FIXME|reason=This product is in the beta phase and is not yet finished}}&lt;br /&gt;
&lt;br /&gt;
innovaphone PBX and apps can be configured to send E-Mails for various subjects and purposes. Major E-Mail providers intent to discontinue the username/password authentication schemes in favour of OAuth2. PBX and Apps version 16r1 does support OAuth2 authentication for SMTP. Here is a step by step guide how to set up OAuth2 support in Microsoft 365 through the Azure Portal and how to set it up on a Google Gmail account in the Google Cloud Console.&lt;br /&gt;
&lt;br /&gt;
== Microsoft 365 ==&lt;br /&gt;
Log in to Microsoft Azure Portal (&amp;lt;nowiki&amp;gt;https://portal.azure.com&amp;lt;/nowiki&amp;gt;) and go to Microsoft Entra ID.&lt;br /&gt;
[[File:AzureMicrosoftEntraID.png|none|thumb|600x600px|/AzureMicrosoftEntraID.png|/AzureMicrosoftEntraID.png]]&lt;br /&gt;
Add a new app registration to create client credentials.&lt;br /&gt;
[[File:AzureAddAppRegistration.png|none|thumb|600x600px|/AzureAddAppRegistration.png|/AzureAddAppRegistration.png]]&lt;br /&gt;
Register the application and maybe already fill in the redirect URI for Web based application type to path OAUTH2-CLIENT/auth.htm at the PBX.&lt;br /&gt;
[[File:AzureRegisterAnApplication.png|none|thumb|600x600px|/AzureRegisterAnApplication.png|/AzureRegisterAnApplication.png]]&lt;br /&gt;
App registration is complete. Client ID and tenant needs to be configured at the PBX and every app that will be sending e-mails.&lt;br /&gt;
[[File:AzureApp.png|none|thumb|600x600px|/AzureApp.png|/AzureApp.png]]&lt;br /&gt;
Create a client secret.&lt;br /&gt;
[[File:AzureAddClientSecret.png|none|thumb|600x600px|/AzureAddClientSecret.png|/AzureAddClientSecret.png]]&lt;br /&gt;
Copy the client secret. It also needs to be configured at the PBX and every app that will be sending e-mails.&lt;br /&gt;
[[File:AzureCopyClientSecret.png|none|thumb|600x600px|/AzureCopyClientSecret.png|/AzureCopyClientSecret.png]]&lt;br /&gt;
Add permissions located in APIs my organization uses.&lt;br /&gt;
[[File:AzureAddApiPermissionMyOrganization.png|none|thumb|600x600px|/AzureAddApiPermissionMyOrganization.png|/AzureAddApiPermissionMyOrganization.png]]&lt;br /&gt;
More precisely located in Office 365 Exchange Online.&lt;br /&gt;
[[File:AzureAddApiPermissionExchange.png|none|thumb|600x600px|/AzureAddApiPermissionExchange.png|/AzureAddApiPermissionExchange.png]]&lt;br /&gt;
And there in the application permissions.&lt;br /&gt;
[[File:AzureAddApiExchangeApplication.png|none|thumb|600x600px|/AzureAddApiExchangeApplication.png|/AzureAddApiExchangeApplication.png]]&lt;br /&gt;
Namely SMTP Mail.Send.&lt;br /&gt;
[[File:AzureAddApiSendMailAsUser.png|none|thumb|600x600px|/AzureAddApiSendMailAsUser.png|/AzureAddApiSendMailAsUser.png]]&lt;br /&gt;
Grant admin permission for Mail.Send.&lt;br /&gt;
[[File:AzureGrantApiPermissions.png|none|thumb|600x600px|/AzureGrantApiPermissions.png|/AzureGrantApiPermissions.png]]&lt;br /&gt;
API permissions are now granted.&lt;br /&gt;
[[File:AzureApiPermissionsGranted.png|none|thumb|600x600px|/AzureApiPermissionsGranted.png|/AzureApiPermissionsGranted.png]]&lt;br /&gt;
Tell all redirect URIs that the PBX and the apps will be using during interactive authorization.&lt;br /&gt;
[[File:AzureRedirectUris.png|none|thumb|600x600px|/AzureRedirectUris.png|/AzureRedirectUris.png]]&lt;br /&gt;
Allow public client flows of OAuth2. Resource Owner Password Credentials Flow has the advantage that it doesn&#039;t need interactive authorization.&lt;br /&gt;
[[File:AzureAllowPublicClientFlows.png|none|thumb|600x600px|/AzureAllowPublicClientFlows.png|/AzureAllowPublicClientFlows.png]]&lt;br /&gt;
Log in to the Microsoft 365 admin center (https://admin.cloud.microsoft).&lt;br /&gt;
[[File:MS365AdminCenter.png|none|thumb|600x600px|/MS365AdminCenter.png|/MS365AdminCenter.png]]&lt;br /&gt;
Make sure that Microsoft 365 licenses are assigned to your user.&lt;br /&gt;
[[File:MS365UserLicenses.png|none|thumb|600x600px|/MS365UserLicenses.png|/MS365UserLicenses.png]]&lt;br /&gt;
Set your user active.&lt;br /&gt;
[[File:MS365ActiveUsers.png|none|thumb|600x600px|/MS365ActiveUsers.png|/MS365ActiveUsers.png]]&lt;br /&gt;
Locate the Mail tab of your user.&lt;br /&gt;
[[File:MS365UserEMail.png|none|thumb|600x600px|/MS365UserEMail.png|/MS365UserEMail.png]]&lt;br /&gt;
Allow authenticated SMTP.&lt;br /&gt;
[[File:MS365AuthenticatedSMTP.png|none|thumb|600x600px|/MS365AuthenticatedSMTP.png|/MS365AuthenticatedSMTP.png]]&lt;br /&gt;
Login to the Exchange admin center (&amp;lt;nowiki&amp;gt;https://admin.exchange.microsoft.com&amp;lt;/nowiki&amp;gt;).&lt;br /&gt;
[[File:ExchangeAdminCenter.png|none|thumb|600x600px|/ExchangeAdminCenter.png|/ExchangeAdminCenter.png]]&lt;br /&gt;
Remove deactivation of the SMTP AUTH protocol.&lt;br /&gt;
[[File:ExchangeRemoveDeavtivatedOAuth2.png|none|thumb|600x600px|/ExchangeRemoveDeavtivatedOAuth2.png|/ExchangeRemoveDeavtivatedOAuth2.png]]&lt;br /&gt;
With this Microsoft setup the OAuth2 configuration for the resource owner password credentials flow can be filled in as follows. &lt;br /&gt;
[[File:OAuth2ResourceOwnerPasswordCredentials.png|none|thumb|600x600px|/OAuth2ResourceOwnerPasswordCredentials.png|/OAuth2ResourceOwnerPasswordCredentials.png]]&lt;br /&gt;
For interactive authorization this is the OAuth2 configuration. Authorize e-mail access one time and send a test mail to verify everything went well.&lt;br /&gt;
[[File:OAuth2InteractiveAuthorization.png|none|thumb|600x600px|/OAuth2InteractiveAuthorization.png|/OAuth2InteractiveAuthorization.png]]&lt;br /&gt;
&lt;br /&gt;
== Gmail ==&lt;br /&gt;
Login to the Google Cloud Console (https://console.cloud.google.com), select a project, New project.&lt;br /&gt;
[[File:GoogleSelectProject.png|none|thumb|600x600px|/GoogleSelectProject.png|/GoogleSelectProject.png]]&lt;br /&gt;
Create the project.&lt;br /&gt;
[[File:GoogleCreateProject.png|none|thumb|600x600px|/GoogleCreateProject.png|/GoogleCreateProject.png]]&lt;br /&gt;
Client credentials will be created in this project.&lt;br /&gt;
[[File:GoogleProjectCreated.png|none|thumb|600x600px|/GoogleProjectCreated.png|/GoogleProjectCreated.png]]&lt;br /&gt;
From the library specify the APIs needed to access.&lt;br /&gt;
[[File:GoogleApisServicesFromLibrary.png|none|thumb|600x600px|/GoogleApisServicesFromLibrary.png]]&lt;br /&gt;
These are in the Gmail API.&lt;br /&gt;
[[File:GoogleApisServicesApiLibrary.png|none|thumb|600x600px|/GoogleApisServicesApiLibrary.png|/GoogleApisServicesApiLibrary.png]]&lt;br /&gt;
Choose the Gmail API and enable it.&lt;br /&gt;
[[File:GoogleGmailApis.png|none|thumb|600x600px|/GoogleGmailApis.png|/GoogleGmailApis.png]]&lt;br /&gt;
Credentials need to be created.&lt;br /&gt;
[[File:GoogleGmailApiAdded.png|none|thumb|600x600px|/GoogleGmailApiAdded.png|/GoogleGmailApiAdded.png]]&lt;br /&gt;
Invoke the help me choose wizard.&lt;br /&gt;
[[File:GoogleCreateCredentialsHelpMeChoose.png|none|thumb|600x600px|/GoogleCreateCredentialsHelpMeChoose.png|/GoogleCreateCredentialsHelpMeChoose.png]]&lt;br /&gt;
User data access is needed.&lt;br /&gt;
[[File:GoogleCredentialsUserData.png|none|thumb|600x600px|/GoogleCredentialsUserData.png|/GoogleCredentialsUserData.png]]&lt;br /&gt;
Configure the consent screen of the interactive authorization.&lt;br /&gt;
[[File:GoogleOAuthConsentScreen.png|none|thumb|600x600px|/GoogleOAuthConsentScreen.png|/GoogleOAuthConsentScreen.png]]&lt;br /&gt;
Specify the permissions that need to be authorized by the user.&lt;br /&gt;
[[File:GoogleOAuthScopes.png|none|thumb|600x600px|/GoogleOAuthScopes.png|/GoogleOAuthScopes.png]]&lt;br /&gt;
Its mail.google.com in general.&lt;br /&gt;
[[File:GoogleScopeMailGoogleCom.png|none|thumb|600x600px|/GoogleScopeMailGoogleCom.png|/GoogleScopeMailGoogleCom.png]]&lt;br /&gt;
And its to send email on the users behalf.&lt;br /&gt;
[[File:GoogleScopeAuthGmailSend.png|none|thumb|600x600px|/GoogleScopeAuthGmailSend.png|/GoogleScopeAuthGmailSend.png]]&lt;br /&gt;
These are the scopes needed.&lt;br /&gt;
[[File:GoogleScopes.png|none|thumb|600x600px|/GoogleScopes.png|/GoogleScopes.png]]&lt;br /&gt;
Ask client credentials for Web type application.&lt;br /&gt;
[[File:GoogleOAuthClientID.png|none|thumb|600x600px|/GoogleOAuthClientID.png|/GoogleOAuthClientID.png]]&lt;br /&gt;
9&lt;br /&gt;
[[File:GoogleRedirectURIs.png|none|thumb|600x600px|/GoogleRedirectURIs.png|/GoogleRedirectURIs.png]]&lt;br /&gt;
1&lt;br /&gt;
[[File:GoogleClientCredentialsDownload.png|none|thumb|600x600px|/GoogleClientCredentialsDownload.png|/GoogleClientCredentialsDownload.png]]&lt;br /&gt;
2&lt;br /&gt;
[[File:GoogleOAuthConsentScreenSettings.png|none|thumb|600x600px|/GoogleOAuthConsentScreenSettings.png|/GoogleOAuthConsentScreenSettings.png]]&lt;br /&gt;
3&lt;br /&gt;
[[File:GoogleConsentScreenWizard.png|none|thumb|600x600px|/GoogleConsentScreenWizard.png|/GoogleConsentScreenWizard.png]]&lt;br /&gt;
4&lt;br /&gt;
[[File:GoogleAudienceExternal.png|none|thumb|600x600px|/GoogleAudienceExternal.png|/GoogleAudienceExternal.png]]&lt;br /&gt;
5&lt;br /&gt;
[[File:GoogleContactInformation.png|none|thumb|600x600px|/GoogleContactInformation.png|/GoogleContactInformation.png]]&lt;br /&gt;
6&lt;br /&gt;
[[File:GoogleTestUserAdded.png|none|thumb|600x600px|/GoogleTestUserAdded.png|/GoogleTestUserAdded.png]]&lt;br /&gt;
7&lt;br /&gt;
[[File:OAuth2InteractiveGmail.png|none|thumb|600x600px|/OAuth2InteractiveGmail.png|/OAuth2InteractiveGmail.png]]&lt;br /&gt;
8&lt;/div&gt;</summary>
		<author><name>Tmo</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Howto16r1:Configure_OAuth2_E-Mail&amp;diff=78140</id>
		<title>Howto16r1:Configure OAuth2 E-Mail</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Howto16r1:Configure_OAuth2_E-Mail&amp;diff=78140"/>
		<updated>2025-10-03T06:05:55Z</updated>

		<summary type="html">&lt;p&gt;Tmo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{FIXME|reason=This product is in the beta phase and is not yet finished}}&lt;br /&gt;
&lt;br /&gt;
innovaphone PBX and apps can be configured to send E-Mails for various subjects and purposes. Major E-Mail providers intent to discontinue the username/password authentication schemes in favour of OAuth2. PBX and Apps version 16r1 does support OAuth2 authentication for SMTP. Here is a step by step guide how to set up OAuth2 support in Microsoft 365 through the Azure Portal and how to set it up on a Google Gmail account in the Google Cloud Console.&lt;br /&gt;
&lt;br /&gt;
== Microsoft 365 ==&lt;br /&gt;
Log in to Microsoft Azure Portal (&amp;lt;nowiki&amp;gt;https://portal.azure.com&amp;lt;/nowiki&amp;gt;) and go to Microsoft Entra ID.&lt;br /&gt;
[[File:AzureMicrosoftEntraID.png|none|thumb|600x600px|/AzureMicrosoftEntraID.png|/AzureMicrosoftEntraID.png]]&lt;br /&gt;
Add a new app registration to create client credentials.&lt;br /&gt;
[[File:AzureAddAppRegistration.png|none|thumb|600x600px|/AzureAddAppRegistration.png|/AzureAddAppRegistration.png]]&lt;br /&gt;
Register the application and maybe already fill in the redirect URI for Web based application type to path OAUTH2-CLIENT/auth.htm at the PBX.&lt;br /&gt;
[[File:AzureRegisterAnApplication.png|none|thumb|600x600px|/AzureRegisterAnApplication.png|/AzureRegisterAnApplication.png]]&lt;br /&gt;
App registration is complete. Client ID and tenant needs to be configured at the PBX and every app that will be sending e-mails.&lt;br /&gt;
[[File:AzureApp.png|none|thumb|600x600px|/AzureApp.png|/AzureApp.png]]&lt;br /&gt;
Create a client secret.&lt;br /&gt;
[[File:AzureAddClientSecret.png|none|thumb|600x600px|/AzureAddClientSecret.png|/AzureAddClientSecret.png]]&lt;br /&gt;
Copy the client secret. It also needs to be configured at the PBX and every app that will be sending e-mails.&lt;br /&gt;
[[File:AzureCopyClientSecret.png|none|thumb|600x600px|/AzureCopyClientSecret.png|/AzureCopyClientSecret.png]]&lt;br /&gt;
Add permissions located in APIs my organization uses.&lt;br /&gt;
[[File:AzureAddApiPermissionMyOrganization.png|none|thumb|600x600px|/AzureAddApiPermissionMyOrganization.png|/AzureAddApiPermissionMyOrganization.png]]&lt;br /&gt;
More precisely located in Office 365 Exchange Online.&lt;br /&gt;
[[File:AzureAddApiPermissionExchange.png|none|thumb|600x600px|/AzureAddApiPermissionExchange.png|/AzureAddApiPermissionExchange.png]]&lt;br /&gt;
And there in the application permissions.&lt;br /&gt;
[[File:AzureAddApiExchangeApplication.png|none|thumb|600x600px|/AzureAddApiExchangeApplication.png|/AzureAddApiExchangeApplication.png]]&lt;br /&gt;
Namely SMTP Mail.Send.&lt;br /&gt;
[[File:AzureAddApiSendMailAsUser.png|none|thumb|600x600px|/AzureAddApiSendMailAsUser.png|/AzureAddApiSendMailAsUser.png]]&lt;br /&gt;
Grant admin permission for Mail.Send.&lt;br /&gt;
[[File:AzureGrantApiPermissions.png|none|thumb|600x600px|/AzureGrantApiPermissions.png|/AzureGrantApiPermissions.png]]&lt;br /&gt;
API permissions are now granted.&lt;br /&gt;
[[File:AzureApiPermissionsGranted.png|none|thumb|600x600px|/AzureApiPermissionsGranted.png|/AzureApiPermissionsGranted.png]]&lt;br /&gt;
Tell all redirect URIs that the PBX and the apps will be using during interactive authorization.&lt;br /&gt;
[[File:AzureRedirectUris.png|none|thumb|600x600px|/AzureRedirectUris.png|/AzureRedirectUris.png]]&lt;br /&gt;
Allow public client flows of OAuth2. Resource Owner Password Credentials Flow has the advantage that it doesn&#039;t need interactive authorization.&lt;br /&gt;
[[File:AzureAllowPublicClientFlows.png|none|thumb|600x600px|/AzureAllowPublicClientFlows.png|/AzureAllowPublicClientFlows.png]]&lt;br /&gt;
Log in to the Microsoft 365 admin center (https://admin.cloud.microsoft).&lt;br /&gt;
[[File:MS365AdminCenter.png|none|thumb|600x600px|/MS365AdminCenter.png|/MS365AdminCenter.png]]&lt;br /&gt;
Make sure that Microsoft 365 licenses are assigned to your user.&lt;br /&gt;
[[File:MS365UserLicenses.png|none|thumb|600x600px|/MS365UserLicenses.png|/MS365UserLicenses.png]]&lt;br /&gt;
Set your user active.&lt;br /&gt;
[[File:MS365ActiveUsers.png|none|thumb|600x600px|/MS365ActiveUsers.png|/MS365ActiveUsers.png]]&lt;br /&gt;
Locate the Mail tab of your user.&lt;br /&gt;
[[File:MS365UserEMail.png|none|thumb|600x600px|/MS365UserEMail.png|/MS365UserEMail.png]]&lt;br /&gt;
Allow authenticated SMTP.&lt;br /&gt;
[[File:MS365AuthenticatedSMTP.png|none|thumb|600x600px|/MS365AuthenticatedSMTP.png|/MS365AuthenticatedSMTP.png]]&lt;br /&gt;
Login to the Exchange admin center (&amp;lt;nowiki&amp;gt;https://admin.exchange.microsoft.com&amp;lt;/nowiki&amp;gt;).&lt;br /&gt;
[[File:ExchangeAdminCenter.png|none|thumb|600x600px|/ExchangeAdminCenter.png|/ExchangeAdminCenter.png]]&lt;br /&gt;
Remove deactivation of the SMTP AUTH protocol.&lt;br /&gt;
[[File:ExchangeRemoveDeavtivatedOAuth2.png|none|thumb|600x600px|/ExchangeRemoveDeavtivatedOAuth2.png|/ExchangeRemoveDeavtivatedOAuth2.png]]&lt;br /&gt;
With this Microsoft setup the OAuth2 configuration for the resource owner password credentials flow can be filled in as follows. &lt;br /&gt;
[[File:OAuth2ResourceOwnerPasswordCredentials.png|none|thumb|600x600px|/OAuth2ResourceOwnerPasswordCredentials.png|/OAuth2ResourceOwnerPasswordCredentials.png]]&lt;br /&gt;
For interactive authorization this is the OAuth2 configuration. Authorize e-mail access one time and send a test mail to verify everything went well.&lt;br /&gt;
[[File:OAuth2InteractiveAuthorization.png|none|thumb|600x600px|/OAuth2InteractiveAuthorization.png|/OAuth2InteractiveAuthorization.png]]&lt;br /&gt;
&lt;br /&gt;
== Gmail ==&lt;br /&gt;
Login to the Google Cloud Console (https://console.cloud.google.com), select a project, New project.&lt;br /&gt;
[[File:GoogleSelectProject.png|none|thumb|600x600px|/GoogleSelectProject.png|/GoogleSelectProject.png]]&lt;br /&gt;
Create the project.&lt;br /&gt;
[[File:GoogleCreateProject.png|none|thumb|600x600px|/GoogleCreateProject.png|/GoogleCreateProject.png]]&lt;br /&gt;
Client credentials will be created in this project.&lt;br /&gt;
[[File:GoogleProjectCreated.png|none|thumb|600x600px|/GoogleProjectCreated.png|/GoogleProjectCreated.png]]&lt;br /&gt;
From the library specify the APIs needed to access.&lt;br /&gt;
[[File:GoogleApisServicesFromLibrary.png|none|thumb|600x600px]]&lt;br /&gt;
These are in the Gmail API.&lt;br /&gt;
[[File:GoogleApisServicesApiLibrary.png|none|thumb|600x600px|/GoogleApisServicesApiLibrary.png|/GoogleApisServicesApiLibrary.png]]&lt;br /&gt;
Choose the Gmail API and enable it.&lt;br /&gt;
[[File:GoogleGmailApis.png|none|thumb|600x600px|/GoogleGmailApis.png|/GoogleGmailApis.png]]&lt;br /&gt;
Credentials need to be created.&lt;br /&gt;
[[File:GoogleGmailApiAdded.png|none|thumb|600x600px|/GoogleGmailApiAdded.png|/GoogleGmailApiAdded.png]]&lt;br /&gt;
Invoke the help me choose wizard.&lt;br /&gt;
[[File:GoogleCreateCredentialsHelpMeChoose.png|none|thumb|600x600px|/GoogleCreateCredentialsHelpMeChoose.png|/GoogleCreateCredentialsHelpMeChoose.png]]&lt;br /&gt;
Access is needed with interactive authorization and user data access.&lt;br /&gt;
[[File:GoogleCredentialsUserData.png|none|thumb|600x600px|/GoogleCredentialsUserData.png|/GoogleCredentialsUserData.png]]&lt;br /&gt;
3&lt;br /&gt;
[[File:GoogleOAuthConsentScreen.png|none|thumb|600x600px|/GoogleOAuthConsentScreen.png|/GoogleOAuthConsentScreen.png]]&lt;br /&gt;
4&lt;br /&gt;
[[File:GoogleOAuthScopes.png|none|thumb|600x600px|/GoogleOAuthScopes.png|/GoogleOAuthScopes.png]]&lt;br /&gt;
5&lt;br /&gt;
[[File:GoogleScopeMailGoogleCom.png|none|thumb|600x600px|/GoogleScopeMailGoogleCom.png|/GoogleScopeMailGoogleCom.png]]&lt;br /&gt;
6&lt;br /&gt;
[[File:GoogleScopeAuthGmailSend.png|none|thumb|600x600px|/GoogleScopeAuthGmailSend.png|/GoogleScopeAuthGmailSend.png]]&lt;br /&gt;
7&lt;br /&gt;
[[File:GoogleScopes.png|none|thumb|600x600px|/GoogleScopes.png|/GoogleScopes.png]]&lt;br /&gt;
8&lt;br /&gt;
[[File:GoogleOAuthClientID.png|none|thumb|600x600px|/GoogleOAuthClientID.png|/GoogleOAuthClientID.png]]&lt;br /&gt;
9&lt;br /&gt;
[[File:GoogleRedirectURIs.png|none|thumb|600x600px|/GoogleRedirectURIs.png|/GoogleRedirectURIs.png]]&lt;br /&gt;
1&lt;br /&gt;
[[File:GoogleClientCredentialsDownload.png|none|thumb|600x600px|/GoogleClientCredentialsDownload.png|/GoogleClientCredentialsDownload.png]]&lt;br /&gt;
2&lt;br /&gt;
[[File:GoogleOAuthConsentScreenSettings.png|none|thumb|600x600px|/GoogleOAuthConsentScreenSettings.png|/GoogleOAuthConsentScreenSettings.png]]&lt;br /&gt;
3&lt;br /&gt;
[[File:GoogleConsentScreenWizard.png|none|thumb|600x600px|/GoogleConsentScreenWizard.png|/GoogleConsentScreenWizard.png]]&lt;br /&gt;
4&lt;br /&gt;
[[File:GoogleAudienceExternal.png|none|thumb|600x600px|/GoogleAudienceExternal.png|/GoogleAudienceExternal.png]]&lt;br /&gt;
5&lt;br /&gt;
[[File:GoogleContactInformation.png|none|thumb|600x600px|/GoogleContactInformation.png|/GoogleContactInformation.png]]&lt;br /&gt;
6&lt;br /&gt;
[[File:GoogleTestUserAdded.png|none|thumb|600x600px|/GoogleTestUserAdded.png|/GoogleTestUserAdded.png]]&lt;br /&gt;
7&lt;br /&gt;
[[File:OAuth2InteractiveGmail.png|none|thumb|600x600px|/OAuth2InteractiveGmail.png|/OAuth2InteractiveGmail.png]]&lt;br /&gt;
8&lt;/div&gt;</summary>
		<author><name>Tmo</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=File:GoogleApisServicesFromLibrary.png&amp;diff=78139</id>
		<title>File:GoogleApisServicesFromLibrary.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=File:GoogleApisServicesFromLibrary.png&amp;diff=78139"/>
		<updated>2025-10-03T06:01:09Z</updated>

		<summary type="html">&lt;p&gt;Tmo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;APIs services from library&lt;/div&gt;</summary>
		<author><name>Tmo</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Howto16r1:Configure_OAuth2_E-Mail&amp;diff=78123</id>
		<title>Howto16r1:Configure OAuth2 E-Mail</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Howto16r1:Configure_OAuth2_E-Mail&amp;diff=78123"/>
		<updated>2025-10-02T21:08:38Z</updated>

		<summary type="html">&lt;p&gt;Tmo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{FIXME|reason=This product is in the beta phase and is not yet finished}}&lt;br /&gt;
&lt;br /&gt;
innovaphone PBX and apps can be configured to send E-Mails for various subjects and purposes. Major E-Mail providers intent to discontinue the username/password authentication schemes in favour of OAuth2. PBX and Apps version 16r1 does support OAuth2 authentication for SMTP. Here is a step by step guide how to set up OAuth2 support in Microsoft 365 through the Azure Portal and how to set it up on a Google Gmail account in the Google Cloud Console.&lt;br /&gt;
&lt;br /&gt;
== Microsoft 365 ==&lt;br /&gt;
Log in to Microsoft Azure Portal (&amp;lt;nowiki&amp;gt;https://portal.azure.com&amp;lt;/nowiki&amp;gt;) and go to Microsoft Entra ID.&lt;br /&gt;
[[File:AzureMicrosoftEntraID.png|none|thumb|600x600px|/AzureMicrosoftEntraID.png|/AzureMicrosoftEntraID.png]]&lt;br /&gt;
Add a new app registration to create client credentials.&lt;br /&gt;
[[File:AzureAddAppRegistration.png|none|thumb|600x600px|/AzureAddAppRegistration.png|/AzureAddAppRegistration.png]]&lt;br /&gt;
Register the application and maybe already fill in the redirect URI for Web based application type to path OAUTH2-CLIENT/auth.htm at the PBX.&lt;br /&gt;
[[File:AzureRegisterAnApplication.png|none|thumb|600x600px|/AzureRegisterAnApplication.png|/AzureRegisterAnApplication.png]]&lt;br /&gt;
App registration is complete. Client ID and tenant needs to be configured at the PBX and every app that will be sending e-mails.&lt;br /&gt;
[[File:AzureApp.png|none|thumb|600x600px|/AzureApp.png|/AzureApp.png]]&lt;br /&gt;
Create a client secret.&lt;br /&gt;
[[File:AzureAddClientSecret.png|none|thumb|600x600px|/AzureAddClientSecret.png|/AzureAddClientSecret.png]]&lt;br /&gt;
Copy the client secret. It also needs to be configured at the PBX and every app that will be sending e-mails.&lt;br /&gt;
[[File:AzureCopyClientSecret.png|none|thumb|600x600px|/AzureCopyClientSecret.png|/AzureCopyClientSecret.png]]&lt;br /&gt;
Add permissions located in APIs my organization uses.&lt;br /&gt;
[[File:AzureAddApiPermissionMyOrganization.png|none|thumb|600x600px|/AzureAddApiPermissionMyOrganization.png|/AzureAddApiPermissionMyOrganization.png]]&lt;br /&gt;
More precisely located in Office 365 Exchange Online.&lt;br /&gt;
[[File:AzureAddApiPermissionExchange.png|none|thumb|600x600px|/AzureAddApiPermissionExchange.png|/AzureAddApiPermissionExchange.png]]&lt;br /&gt;
And there in the application permissions.&lt;br /&gt;
[[File:AzureAddApiExchangeApplication.png|none|thumb|600x600px|/AzureAddApiExchangeApplication.png|/AzureAddApiExchangeApplication.png]]&lt;br /&gt;
Namely SMTP Mail.Send.&lt;br /&gt;
[[File:AzureAddApiSendMailAsUser.png|none|thumb|600x600px|/AzureAddApiSendMailAsUser.png|/AzureAddApiSendMailAsUser.png]]&lt;br /&gt;
Grant admin permission for Mail.Send.&lt;br /&gt;
[[File:AzureGrantApiPermissions.png|none|thumb|600x600px|/AzureGrantApiPermissions.png|/AzureGrantApiPermissions.png]]&lt;br /&gt;
API permissions are now granted.&lt;br /&gt;
[[File:AzureApiPermissionsGranted.png|none|thumb|600x600px|/AzureApiPermissionsGranted.png|/AzureApiPermissionsGranted.png]]&lt;br /&gt;
Tell all redirect URIs that the PBX and the apps will be using during interactive authorization.&lt;br /&gt;
[[File:AzureRedirectUris.png|none|thumb|600x600px|/AzureRedirectUris.png|/AzureRedirectUris.png]]&lt;br /&gt;
Allow public client flows of OAuth2. Resource Owner Password Credentials Flow has the advantage that it doesn&#039;t need interactive authorization.&lt;br /&gt;
[[File:AzureAllowPublicClientFlows.png|none|thumb|600x600px|/AzureAllowPublicClientFlows.png|/AzureAllowPublicClientFlows.png]]&lt;br /&gt;
Log in to the Microsoft 365 admin center (https://admin.cloud.microsoft).&lt;br /&gt;
[[File:MS365AdminCenter.png|none|thumb|600x600px|/MS365AdminCenter.png|/MS365AdminCenter.png]]&lt;br /&gt;
Make sure that Microsoft 365 licenses are assigned to your user.&lt;br /&gt;
[[File:MS365UserLicenses.png|none|thumb|600x600px|/MS365UserLicenses.png|/MS365UserLicenses.png]]&lt;br /&gt;
Set your user active.&lt;br /&gt;
[[File:MS365ActiveUsers.png|none|thumb|600x600px|/MS365ActiveUsers.png|/MS365ActiveUsers.png]]&lt;br /&gt;
Locate the Mail tab of your user.&lt;br /&gt;
[[File:MS365UserEMail.png|none|thumb|600x600px|/MS365UserEMail.png|/MS365UserEMail.png]]&lt;br /&gt;
Allow authenticated SMTP.&lt;br /&gt;
[[File:MS365AuthenticatedSMTP.png|none|thumb|600x600px|/MS365AuthenticatedSMTP.png|/MS365AuthenticatedSMTP.png]]&lt;br /&gt;
Login to the Exchange admin center (&amp;lt;nowiki&amp;gt;https://admin.exchange.microsoft.com&amp;lt;/nowiki&amp;gt;).&lt;br /&gt;
[[File:ExchangeAdminCenter.png|none|thumb|600x600px|/ExchangeAdminCenter.png|/ExchangeAdminCenter.png]]&lt;br /&gt;
Remove deactivation of the SMTP AUTH protocol.&lt;br /&gt;
[[File:ExchangeRemoveDeavtivatedOAuth2.png|none|thumb|600x600px|/ExchangeRemoveDeavtivatedOAuth2.png|/ExchangeRemoveDeavtivatedOAuth2.png]]&lt;br /&gt;
With this Microsoft setup the OAuth2 configuration for the resource owner password credentials flow can be filled in as follows. &lt;br /&gt;
[[File:OAuth2ResourceOwnerPasswordCredentials.png|none|thumb|600x600px|/OAuth2ResourceOwnerPasswordCredentials.png|/OAuth2ResourceOwnerPasswordCredentials.png]]&lt;br /&gt;
For interactive authorization this is the OAuth2 configuration. Authorize e-mail access one time and send a test mail to verify everything went well.&lt;br /&gt;
[[File:OAuth2InteractiveAuthorization.png|none|thumb|600x600px|/OAuth2InteractiveAuthorization.png|/OAuth2InteractiveAuthorization.png]]&lt;br /&gt;
&lt;br /&gt;
== Gmail ==&lt;br /&gt;
1&lt;br /&gt;
[[File:GoogleSelectProject.png|none|thumb|600x600px|/GoogleSelectProject.png]]&lt;br /&gt;
2&lt;br /&gt;
[[File:GoogleCreateProject.png|none|thumb|600x600px|/GoogleCreateProject.png]]&lt;br /&gt;
3&lt;br /&gt;
[[File:GoogleProjectCreated.png|none|thumb|600x600px|/GoogleProjectCreated.png]]&lt;br /&gt;
4&lt;br /&gt;
[[File:GoogleEnabledApisServices.png|none|thumb|600x600px|/GoogleEnabledApisServices.png]]&lt;br /&gt;
5&lt;br /&gt;
[[File:GoogleApisServicesLibrary.png|none|thumb|600x600px|/GoogleApisServicesLibrary.png]]&lt;br /&gt;
6&lt;br /&gt;
[[File:GoogleApisServicesApiLibrary.png|none|thumb|600x600px|/GoogleApisServicesApiLibrary.png]]&lt;br /&gt;
7&lt;br /&gt;
[[File:GoogleGmailApis.png|none|thumb|600x600px|/GoogleGmailApis.png]]&lt;br /&gt;
8&lt;br /&gt;
[[File:GoogleAddGmailApi.png|none|thumb|600x600px|/GoogleAddGmailApi.png]]&lt;br /&gt;
9&lt;br /&gt;
[[File:GoogleGmailApiAdded.png|none|thumb|600x600px|/GoogleGmailApiAdded.png]]&lt;br /&gt;
1&lt;br /&gt;
[[File:GoogleCreateCredentialsHelpMeChoose.png|none|thumb|600x600px|/GoogleCreateCredentialsHelpMeChoose.png]]&lt;br /&gt;
2&lt;br /&gt;
[[File:GoogleCredentialsUserData.png|none|thumb|600x600px|/GoogleCredentialsUserData.png]]&lt;br /&gt;
3&lt;br /&gt;
[[File:GoogleOAuthConsentScreen.png|none|thumb|600x600px|/GoogleOAuthConsentScreen.png]]&lt;br /&gt;
4&lt;br /&gt;
[[File:GoogleOAuthScopes.png|none|thumb|600x600px|/GoogleOAuthScopes.png]]&lt;br /&gt;
5&lt;br /&gt;
[[File:GoogleScopeMailGoogleCom.png|none|thumb|600x600px|/GoogleScopeMailGoogleCom.png]]&lt;br /&gt;
6&lt;br /&gt;
[[File:GoogleScopeAuthGmailSend.png|none|thumb|600x600px|/GoogleScopeAuthGmailSend.png]]&lt;br /&gt;
7&lt;br /&gt;
[[File:GoogleScopes.png|none|thumb|600x600px|/GoogleScopes.png]]&lt;br /&gt;
8&lt;br /&gt;
[[File:GoogleOAuthClientID.png|none|thumb|600x600px|/GoogleOAuthClientID.png]]&lt;br /&gt;
9&lt;br /&gt;
[[File:GoogleRedirectURIs.png|none|thumb|600x600px|/GoogleRedirectURIs.png]]&lt;br /&gt;
1&lt;br /&gt;
[[File:GoogleClientCredentialsDownload.png|none|thumb|600x600px|/GoogleClientCredentialsDownload.png]]&lt;br /&gt;
2&lt;br /&gt;
[[File:GoogleOAuthConsentScreenSettings.png|none|thumb|600x600px|/GoogleOAuthConsentScreenSettings.png]]&lt;br /&gt;
3&lt;br /&gt;
[[File:GoogleConsentScreenWizard.png|none|thumb|600x600px|/GoogleConsentScreenWizard.png]]&lt;br /&gt;
4&lt;br /&gt;
[[File:GoogleAudienceExternal.png|none|thumb|600x600px|/GoogleAudienceExternal.png]]&lt;br /&gt;
5&lt;br /&gt;
[[File:GoogleContactInformation.png|none|thumb|600x600px|/GoogleContactInformation.png]]&lt;br /&gt;
6&lt;br /&gt;
[[File:GoogleTestUserAdded.png|none|thumb|600x600px|/GoogleTestUserAdded.png]]&lt;br /&gt;
7&lt;br /&gt;
[[File:OAuth2InteractiveGmail.png|none|thumb|600x600px|/OAuth2InteractiveGmail.png]]&lt;br /&gt;
8&lt;/div&gt;</summary>
		<author><name>Tmo</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Howto16r1:Configure_OAuth2_E-Mail&amp;diff=78122</id>
		<title>Howto16r1:Configure OAuth2 E-Mail</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Howto16r1:Configure_OAuth2_E-Mail&amp;diff=78122"/>
		<updated>2025-10-02T21:07:47Z</updated>

		<summary type="html">&lt;p&gt;Tmo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{FIXME|reason=This product is in the beta phase and is not yet finished}}&lt;br /&gt;
[[File:OAuth2InteractiveGmail.png|none|thumb|600x600px]]&lt;br /&gt;
innovaphone PBX and apps can be configured to send E-Mails for various subjects and purposes. Major E-Mail providers intent to discontinue the username/password authentication schemes in favour of OAuth2. PBX and Apps version 16r1 does support OAuth2 authentication for SMTP. Here is a step by step guide how to set up OAuth2 support in Microsoft 365 through the Azure Portal and how to set it up on a Google Gmail account in the Google Cloud Console.&lt;br /&gt;
&lt;br /&gt;
== Microsoft 365 ==&lt;br /&gt;
Log in to Microsoft Azure Portal (&amp;lt;nowiki&amp;gt;https://portal.azure.com&amp;lt;/nowiki&amp;gt;) and go to Microsoft Entra ID.&lt;br /&gt;
[[File:AzureMicrosoftEntraID.png|none|thumb|600x600px|/AzureMicrosoftEntraID.png|/AzureMicrosoftEntraID.png]]&lt;br /&gt;
Add a new app registration to create client credentials.&lt;br /&gt;
[[File:AzureAddAppRegistration.png|none|thumb|600x600px|/AzureAddAppRegistration.png|/AzureAddAppRegistration.png]]&lt;br /&gt;
Register the application and maybe already fill in the redirect URI for Web based application type to path OAUTH2-CLIENT/auth.htm at the PBX.&lt;br /&gt;
[[File:AzureRegisterAnApplication.png|none|thumb|600x600px|/AzureRegisterAnApplication.png|/AzureRegisterAnApplication.png]]&lt;br /&gt;
App registration is complete. Client ID and tenant needs to be configured at the PBX and every app that will be sending e-mails.&lt;br /&gt;
[[File:AzureApp.png|none|thumb|600x600px|/AzureApp.png|/AzureApp.png]]&lt;br /&gt;
Create a client secret.&lt;br /&gt;
[[File:AzureAddClientSecret.png|none|thumb|600x600px|/AzureAddClientSecret.png|/AzureAddClientSecret.png]]&lt;br /&gt;
Copy the client secret. It also needs to be configured at the PBX and every app that will be sending e-mails.&lt;br /&gt;
[[File:AzureCopyClientSecret.png|none|thumb|600x600px|/AzureCopyClientSecret.png|/AzureCopyClientSecret.png]]&lt;br /&gt;
Add permissions located in APIs my organization uses.&lt;br /&gt;
[[File:AzureAddApiPermissionMyOrganization.png|none|thumb|600x600px|/AzureAddApiPermissionMyOrganization.png|/AzureAddApiPermissionMyOrganization.png]]&lt;br /&gt;
More precisely located in Office 365 Exchange Online.&lt;br /&gt;
[[File:AzureAddApiPermissionExchange.png|none|thumb|600x600px|/AzureAddApiPermissionExchange.png|/AzureAddApiPermissionExchange.png]]&lt;br /&gt;
And there in the application permissions.&lt;br /&gt;
[[File:AzureAddApiExchangeApplication.png|none|thumb|600x600px|/AzureAddApiExchangeApplication.png|/AzureAddApiExchangeApplication.png]]&lt;br /&gt;
Namely SMTP Mail.Send.&lt;br /&gt;
[[File:AzureAddApiSendMailAsUser.png|none|thumb|600x600px|/AzureAddApiSendMailAsUser.png|/AzureAddApiSendMailAsUser.png]]&lt;br /&gt;
Grant admin permission for Mail.Send.&lt;br /&gt;
[[File:AzureGrantApiPermissions.png|none|thumb|600x600px|/AzureGrantApiPermissions.png|/AzureGrantApiPermissions.png]]&lt;br /&gt;
API permissions are now granted.&lt;br /&gt;
[[File:AzureApiPermissionsGranted.png|none|thumb|600x600px|/AzureApiPermissionsGranted.png|/AzureApiPermissionsGranted.png]]&lt;br /&gt;
Tell all redirect URIs that the PBX and the apps will be using during interactive authorization.&lt;br /&gt;
[[File:AzureRedirectUris.png|none|thumb|600x600px|/AzureRedirectUris.png|/AzureRedirectUris.png]]&lt;br /&gt;
Allow public client flows of OAuth2. Resource Owner Password Credentials Flow has the advantage that it doesn&#039;t need interactive authorization.&lt;br /&gt;
[[File:AzureAllowPublicClientFlows.png|none|thumb|600x600px|/AzureAllowPublicClientFlows.png|/AzureAllowPublicClientFlows.png]]&lt;br /&gt;
Log in to the Microsoft 365 admin center (https://admin.cloud.microsoft).&lt;br /&gt;
[[File:MS365AdminCenter.png|none|thumb|600x600px|/MS365AdminCenter.png|/MS365AdminCenter.png]]&lt;br /&gt;
Make sure that Microsoft 365 licenses are assigned to your user.&lt;br /&gt;
[[File:MS365UserLicenses.png|none|thumb|600x600px|/MS365UserLicenses.png|/MS365UserLicenses.png]]&lt;br /&gt;
Set your user active.&lt;br /&gt;
[[File:MS365ActiveUsers.png|none|thumb|600x600px|/MS365ActiveUsers.png|/MS365ActiveUsers.png]]&lt;br /&gt;
Locate the Mail tab of your user.&lt;br /&gt;
[[File:MS365UserEMail.png|none|thumb|600x600px|/MS365UserEMail.png|/MS365UserEMail.png]]&lt;br /&gt;
Allow authenticated SMTP.&lt;br /&gt;
[[File:MS365AuthenticatedSMTP.png|none|thumb|600x600px|/MS365AuthenticatedSMTP.png|/MS365AuthenticatedSMTP.png]]&lt;br /&gt;
Login to the Exchange admin center (&amp;lt;nowiki&amp;gt;https://admin.exchange.microsoft.com&amp;lt;/nowiki&amp;gt;).&lt;br /&gt;
[[File:ExchangeAdminCenter.png|none|thumb|600x600px|/ExchangeAdminCenter.png|/ExchangeAdminCenter.png]]&lt;br /&gt;
Remove deactivation of the SMTP AUTH protocol.&lt;br /&gt;
[[File:ExchangeRemoveDeavtivatedOAuth2.png|none|thumb|600x600px|/ExchangeRemoveDeavtivatedOAuth2.png|/ExchangeRemoveDeavtivatedOAuth2.png]]&lt;br /&gt;
With this Microsoft setup the OAuth2 configuration for the resource owner password credentials flow can be filled in as follows. &lt;br /&gt;
[[File:OAuth2ResourceOwnerPasswordCredentials.png|none|thumb|600x600px|/OAuth2ResourceOwnerPasswordCredentials.png|/OAuth2ResourceOwnerPasswordCredentials.png]]&lt;br /&gt;
For interactive authorization this is the OAuth2 configuration. Authorize e-mail access one time and send a test mail to verify everything went well.&lt;br /&gt;
[[File:OAuth2InteractiveAuthorization.png|none|thumb|600x600px|/OAuth2InteractiveAuthorization.png|/OAuth2InteractiveAuthorization.png]]&lt;br /&gt;
&lt;br /&gt;
== Gmail ==&lt;br /&gt;
1&lt;br /&gt;
[[File:GoogleSelectProject.png|none|thumb|600x600px|/GoogleSelectProject.png]]&lt;br /&gt;
2&lt;br /&gt;
[[File:GoogleCreateProject.png|none|thumb|600x600px|/GoogleCreateProject.png]]&lt;br /&gt;
3&lt;br /&gt;
[[File:GoogleProjectCreated.png|none|thumb|600x600px|/GoogleProjectCreated.png]]&lt;br /&gt;
4&lt;br /&gt;
[[File:GoogleEnabledApisServices.png|none|thumb|600x600px|/GoogleEnabledApisServices.png]]&lt;br /&gt;
5&lt;br /&gt;
[[File:GoogleApisServicesLibrary.png|none|thumb|600x600px|/GoogleApisServicesLibrary.png]]&lt;br /&gt;
6&lt;br /&gt;
[[File:GoogleApisServicesApiLibrary.png|none|thumb|600x600px|/GoogleApisServicesApiLibrary.png]]&lt;br /&gt;
7&lt;br /&gt;
[[File:GoogleGmailApis.png|none|thumb|600x600px|/GoogleGmailApis.png]]&lt;br /&gt;
8&lt;br /&gt;
[[File:GoogleAddGmailApi.png|none|thumb|600x600px|/GoogleAddGmailApi.png]]&lt;br /&gt;
9&lt;br /&gt;
[[File:GoogleGmailApiAdded.png|none|thumb|600x600px|/GoogleGmailApiAdded.png]]&lt;br /&gt;
1&lt;br /&gt;
[[File:GoogleCreateCredentialsHelpMeChoose.png|none|thumb|600x600px|/GoogleCreateCredentialsHelpMeChoose.png]]&lt;br /&gt;
2&lt;br /&gt;
[[File:GoogleCredentialsUserData.png|none|thumb|600x600px|/GoogleCredentialsUserData.png]]&lt;br /&gt;
3&lt;br /&gt;
[[File:GoogleOAuthConsentScreen.png|none|thumb|600x600px|/GoogleOAuthConsentScreen.png]]&lt;br /&gt;
4&lt;br /&gt;
[[File:GoogleOAuthScopes.png|none|thumb|600x600px|/GoogleOAuthScopes.png]]&lt;br /&gt;
5&lt;br /&gt;
[[File:GoogleScopeMailGoogleCom.png|none|thumb|600x600px|/GoogleScopeMailGoogleCom.png]]&lt;br /&gt;
6&lt;br /&gt;
[[File:GoogleScopeAuthGmailSend.png|none|thumb|600x600px|/GoogleScopeAuthGmailSend.png]]&lt;br /&gt;
7&lt;br /&gt;
[[File:GoogleScopes.png|none|thumb|600x600px|/GoogleScopes.png]]&lt;br /&gt;
8&lt;br /&gt;
[[File:GoogleOAuthClientID.png|none|thumb|600x600px|/GoogleOAuthClientID.png]]&lt;br /&gt;
9&lt;br /&gt;
[[File:GoogleRedirectURIs.png|none|thumb|600x600px|/GoogleRedirectURIs.png]]&lt;br /&gt;
1&lt;br /&gt;
[[File:GoogleClientCredentialsDownload.png|none|thumb|600x600px|/GoogleClientCredentialsDownload.png]]&lt;br /&gt;
2&lt;br /&gt;
[[File:GoogleOAuthConsentScreenSettings.png|none|thumb|600x600px|/GoogleOAuthConsentScreenSettings.png]]&lt;br /&gt;
3&lt;br /&gt;
[[File:GoogleConsentScreenWizard.png|none|thumb|600x600px|/GoogleConsentScreenWizard.png]]&lt;br /&gt;
4&lt;br /&gt;
[[File:GoogleAudienceExternal.png|none|thumb|600x600px|/GoogleAudienceExternal.png]]&lt;br /&gt;
5&lt;br /&gt;
[[File:GoogleContactInformation.png|none|thumb|600x600px|/GoogleContactInformation.png]]&lt;br /&gt;
6&lt;br /&gt;
[[File:GoogleTestUserAdded.png|none|thumb|600x600px|/GoogleTestUserAdded.png]]&lt;br /&gt;
7&lt;br /&gt;
&lt;br /&gt;
8&lt;/div&gt;</summary>
		<author><name>Tmo</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=File:OAuth2InteractiveGmail.png&amp;diff=78121</id>
		<title>File:OAuth2InteractiveGmail.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=File:OAuth2InteractiveGmail.png&amp;diff=78121"/>
		<updated>2025-10-02T21:07:27Z</updated>

		<summary type="html">&lt;p&gt;Tmo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;OAuth2 interactive Gmail&lt;/div&gt;</summary>
		<author><name>Tmo</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Howto16r1:Configure_OAuth2_E-Mail&amp;diff=78114</id>
		<title>Howto16r1:Configure OAuth2 E-Mail</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Howto16r1:Configure_OAuth2_E-Mail&amp;diff=78114"/>
		<updated>2025-10-02T21:01:38Z</updated>

		<summary type="html">&lt;p&gt;Tmo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{FIXME|reason=This product is in the beta phase and is not yet finished}}&lt;br /&gt;
&lt;br /&gt;
innovaphone PBX and apps can be configured to send E-Mails for various subjects and purposes. Major E-Mail providers intent to discontinue the username/password authentication schemes in favour of OAuth2. PBX and Apps version 16r1 does support OAuth2 authentication for SMTP. Here is a step by step guide how to set up OAuth2 support in Microsoft 365 through the Azure Portal and how to set it up on a Google Gmail account in the Google Cloud Console.&lt;br /&gt;
&lt;br /&gt;
== Microsoft 365 ==&lt;br /&gt;
Log in to Microsoft Azure Portal (&amp;lt;nowiki&amp;gt;https://portal.azure.com&amp;lt;/nowiki&amp;gt;) and go to Microsoft Entra ID.&lt;br /&gt;
[[File:AzureMicrosoftEntraID.png|none|thumb|600x600px|/AzureMicrosoftEntraID.png|/AzureMicrosoftEntraID.png]]&lt;br /&gt;
Add a new app registration to create client credentials.&lt;br /&gt;
[[File:AzureAddAppRegistration.png|none|thumb|600x600px|/AzureAddAppRegistration.png|/AzureAddAppRegistration.png]]&lt;br /&gt;
Register the application and maybe already fill in the redirect URI for Web based application type to path OAUTH2-CLIENT/auth.htm at the PBX.&lt;br /&gt;
[[File:AzureRegisterAnApplication.png|none|thumb|600x600px|/AzureRegisterAnApplication.png|/AzureRegisterAnApplication.png]]&lt;br /&gt;
App registration is complete. Client ID and tenant needs to be configured at the PBX and every app that will be sending e-mails.&lt;br /&gt;
[[File:AzureApp.png|none|thumb|600x600px|/AzureApp.png|/AzureApp.png]]&lt;br /&gt;
Create a client secret.&lt;br /&gt;
[[File:AzureAddClientSecret.png|none|thumb|600x600px|/AzureAddClientSecret.png|/AzureAddClientSecret.png]]&lt;br /&gt;
Copy the client secret. It also needs to be configured at the PBX and every app that will be sending e-mails.&lt;br /&gt;
[[File:AzureCopyClientSecret.png|none|thumb|600x600px|/AzureCopyClientSecret.png|/AzureCopyClientSecret.png]]&lt;br /&gt;
Add permissions located in APIs my organization uses.&lt;br /&gt;
[[File:AzureAddApiPermissionMyOrganization.png|none|thumb|600x600px|/AzureAddApiPermissionMyOrganization.png|/AzureAddApiPermissionMyOrganization.png]]&lt;br /&gt;
More precisely located in Office 365 Exchange Online.&lt;br /&gt;
[[File:AzureAddApiPermissionExchange.png|none|thumb|600x600px|/AzureAddApiPermissionExchange.png|/AzureAddApiPermissionExchange.png]]&lt;br /&gt;
And there in the application permissions.&lt;br /&gt;
[[File:AzureAddApiExchangeApplication.png|none|thumb|600x600px|/AzureAddApiExchangeApplication.png|/AzureAddApiExchangeApplication.png]]&lt;br /&gt;
Namely SMTP Mail.Send.&lt;br /&gt;
[[File:AzureAddApiSendMailAsUser.png|none|thumb|600x600px|/AzureAddApiSendMailAsUser.png|/AzureAddApiSendMailAsUser.png]]&lt;br /&gt;
Grant admin permission for Mail.Send.&lt;br /&gt;
[[File:AzureGrantApiPermissions.png|none|thumb|600x600px|/AzureGrantApiPermissions.png|/AzureGrantApiPermissions.png]]&lt;br /&gt;
API permissions are now granted.&lt;br /&gt;
[[File:AzureApiPermissionsGranted.png|none|thumb|600x600px|/AzureApiPermissionsGranted.png|/AzureApiPermissionsGranted.png]]&lt;br /&gt;
Tell all redirect URIs that the PBX and the apps will be using during interactive authorization.&lt;br /&gt;
[[File:AzureRedirectUris.png|none|thumb|600x600px|/AzureRedirectUris.png|/AzureRedirectUris.png]]&lt;br /&gt;
Allow public client flows of OAuth2. Resource Owner Password Credentials Flow has the advantage that it doesn&#039;t need interactive authorization.&lt;br /&gt;
[[File:AzureAllowPublicClientFlows.png|none|thumb|600x600px|/AzureAllowPublicClientFlows.png|/AzureAllowPublicClientFlows.png]]&lt;br /&gt;
Log in to the Microsoft 365 admin center (https://admin.cloud.microsoft).&lt;br /&gt;
[[File:MS365AdminCenter.png|none|thumb|600x600px|/MS365AdminCenter.png|/MS365AdminCenter.png]]&lt;br /&gt;
Make sure that Microsoft 365 licenses are assigned to your user.&lt;br /&gt;
[[File:MS365UserLicenses.png|none|thumb|600x600px|/MS365UserLicenses.png|/MS365UserLicenses.png]]&lt;br /&gt;
Set your user active.&lt;br /&gt;
[[File:MS365ActiveUsers.png|none|thumb|600x600px|/MS365ActiveUsers.png|/MS365ActiveUsers.png]]&lt;br /&gt;
Locate the Mail tab of your user.&lt;br /&gt;
[[File:MS365UserEMail.png|none|thumb|600x600px|/MS365UserEMail.png|/MS365UserEMail.png]]&lt;br /&gt;
Allow authenticated SMTP.&lt;br /&gt;
[[File:MS365AuthenticatedSMTP.png|none|thumb|600x600px|/MS365AuthenticatedSMTP.png|/MS365AuthenticatedSMTP.png]]&lt;br /&gt;
Login to the Exchange admin center (&amp;lt;nowiki&amp;gt;https://admin.exchange.microsoft.com&amp;lt;/nowiki&amp;gt;).&lt;br /&gt;
[[File:ExchangeAdminCenter.png|none|thumb|600x600px|/ExchangeAdminCenter.png|/ExchangeAdminCenter.png]]&lt;br /&gt;
Remove deactivation of the SMTP AUTH protocol.&lt;br /&gt;
[[File:ExchangeRemoveDeavtivatedOAuth2.png|none|thumb|600x600px|/ExchangeRemoveDeavtivatedOAuth2.png|/ExchangeRemoveDeavtivatedOAuth2.png]]&lt;br /&gt;
With this Microsoft setup the OAuth2 configuration for the resource owner password credentials flow can be filled in as follows. &lt;br /&gt;
[[File:OAuth2ResourceOwnerPasswordCredentials.png|none|thumb|600x600px|/OAuth2ResourceOwnerPasswordCredentials.png|/OAuth2ResourceOwnerPasswordCredentials.png]]&lt;br /&gt;
For interactive authorization this is the OAuth2 configuration. Authorize e-mail access one time and send a test mail to verify everything went well.&lt;br /&gt;
[[File:OAuth2InteractiveAuthorization.png|none|thumb|600x600px|/OAuth2InteractiveAuthorization.png|/OAuth2InteractiveAuthorization.png]]&lt;br /&gt;
&lt;br /&gt;
== Gmail ==&lt;br /&gt;
1&lt;br /&gt;
[[File:GoogleSelectProject.png|none|thumb|600x600px]]&lt;br /&gt;
2&lt;br /&gt;
[[File:GoogleCreateProject.png|none|thumb|600x600px]]&lt;br /&gt;
3&lt;br /&gt;
[[File:GoogleProjectCreated.png|none|thumb|600x600px]]&lt;br /&gt;
4&lt;br /&gt;
[[File:GoogleEnabledApisServices.png|none|thumb|600x600px]]&lt;br /&gt;
5&lt;br /&gt;
[[File:GoogleApisServicesLibrary.png|none|thumb|600x600px]]&lt;br /&gt;
6&lt;br /&gt;
[[File:GoogleApisServicesApiLibrary.png|none|thumb|600x600px]]&lt;br /&gt;
7&lt;br /&gt;
[[File:GoogleGmailApis.png|none|thumb|600x600px]]&lt;br /&gt;
8&lt;br /&gt;
[[File:GoogleAddGmailApi.png|none|thumb|600x600px]]&lt;br /&gt;
9&lt;br /&gt;
[[File:GoogleGmailApiAdded.png|none|thumb|600x600px]]&lt;br /&gt;
1&lt;br /&gt;
[[File:GoogleCreateCredentialsHelpMeChoose.png|none|thumb|600x600px]]&lt;br /&gt;
2&lt;br /&gt;
[[File:GoogleCredentialsUserData.png|none|thumb|600x600px]]&lt;br /&gt;
3&lt;br /&gt;
[[File:GoogleOAuthConsentScreen.png|none|thumb|600x600px]]&lt;br /&gt;
4&lt;br /&gt;
[[File:GoogleOAuthScopes.png|none|thumb|600x600px]]&lt;br /&gt;
5&lt;br /&gt;
[[File:GoogleScopeMailGoogleCom.png|none|thumb|600x600px]]&lt;br /&gt;
6&lt;br /&gt;
[[File:GoogleScopeAuthGmailSend.png|none|thumb|600x600px]]&lt;br /&gt;
7&lt;br /&gt;
[[File:GoogleScopes.png|none|thumb|600x600px]]&lt;br /&gt;
8&lt;br /&gt;
[[File:GoogleOAuthClientID.png|none|thumb|600x600px]]&lt;br /&gt;
9&lt;br /&gt;
[[File:GoogleRedirectURIs.png|none|thumb|600x600px]]&lt;br /&gt;
1&lt;br /&gt;
[[File:GoogleClientCredentialsDownload.png|none|thumb|600x600px]]&lt;br /&gt;
2&lt;br /&gt;
[[File:GoogleOAuthConsentScreenSettings.png|none|thumb|600x600px]]&lt;br /&gt;
3&lt;br /&gt;
[[File:GoogleConsentScreenWizard.png|none|thumb|600x600px]]&lt;br /&gt;
4&lt;br /&gt;
[[File:GoogleAudienceExternal.png|none|thumb|600x600px]]&lt;br /&gt;
5&lt;br /&gt;
[[File:GoogleContactInformation.png|none|thumb|600x600px]]&lt;br /&gt;
6&lt;br /&gt;
[[File:GoogleTestUserAdded.png|none|thumb|600x600px]]&lt;br /&gt;
7&lt;br /&gt;
&lt;br /&gt;
8&lt;/div&gt;</summary>
		<author><name>Tmo</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=File:GoogleTestUserAdded.png&amp;diff=78113</id>
		<title>File:GoogleTestUserAdded.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=File:GoogleTestUserAdded.png&amp;diff=78113"/>
		<updated>2025-10-02T21:01:07Z</updated>

		<summary type="html">&lt;p&gt;Tmo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Test user added&lt;/div&gt;</summary>
		<author><name>Tmo</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=File:GoogleContactInformation.png&amp;diff=78111</id>
		<title>File:GoogleContactInformation.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=File:GoogleContactInformation.png&amp;diff=78111"/>
		<updated>2025-10-02T21:00:38Z</updated>

		<summary type="html">&lt;p&gt;Tmo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Contact information&lt;/div&gt;</summary>
		<author><name>Tmo</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=File:GoogleAudienceExternal.png&amp;diff=78110</id>
		<title>File:GoogleAudienceExternal.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=File:GoogleAudienceExternal.png&amp;diff=78110"/>
		<updated>2025-10-02T21:00:08Z</updated>

		<summary type="html">&lt;p&gt;Tmo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Audience external&lt;/div&gt;</summary>
		<author><name>Tmo</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=File:GoogleConsentScreenWizard.png&amp;diff=78108</id>
		<title>File:GoogleConsentScreenWizard.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=File:GoogleConsentScreenWizard.png&amp;diff=78108"/>
		<updated>2025-10-02T20:59:35Z</updated>

		<summary type="html">&lt;p&gt;Tmo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Consent screen wizard&lt;/div&gt;</summary>
		<author><name>Tmo</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=File:GoogleOAuthConsentScreenSettings.png&amp;diff=78105</id>
		<title>File:GoogleOAuthConsentScreenSettings.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=File:GoogleOAuthConsentScreenSettings.png&amp;diff=78105"/>
		<updated>2025-10-02T20:58:32Z</updated>

		<summary type="html">&lt;p&gt;Tmo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;OAuth consent screen settings&lt;/div&gt;</summary>
		<author><name>Tmo</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=File:GoogleClientCredentialsDownload.png&amp;diff=78103</id>
		<title>File:GoogleClientCredentialsDownload.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=File:GoogleClientCredentialsDownload.png&amp;diff=78103"/>
		<updated>2025-10-02T20:57:52Z</updated>

		<summary type="html">&lt;p&gt;Tmo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Client credentials download&lt;/div&gt;</summary>
		<author><name>Tmo</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=File:GoogleRedirectURIs.png&amp;diff=78100</id>
		<title>File:GoogleRedirectURIs.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=File:GoogleRedirectURIs.png&amp;diff=78100"/>
		<updated>2025-10-02T20:57:15Z</updated>

		<summary type="html">&lt;p&gt;Tmo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Redirect URIs&lt;/div&gt;</summary>
		<author><name>Tmo</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=File:GoogleOAuthClientID.png&amp;diff=78098</id>
		<title>File:GoogleOAuthClientID.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=File:GoogleOAuthClientID.png&amp;diff=78098"/>
		<updated>2025-10-02T20:56:44Z</updated>

		<summary type="html">&lt;p&gt;Tmo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;OAuth Client ID&lt;/div&gt;</summary>
		<author><name>Tmo</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=File:GoogleScopes.png&amp;diff=78097</id>
		<title>File:GoogleScopes.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=File:GoogleScopes.png&amp;diff=78097"/>
		<updated>2025-10-02T20:56:03Z</updated>

		<summary type="html">&lt;p&gt;Tmo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Scopes&lt;/div&gt;</summary>
		<author><name>Tmo</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=File:GoogleScopeAuthGmailSend.png&amp;diff=78095</id>
		<title>File:GoogleScopeAuthGmailSend.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=File:GoogleScopeAuthGmailSend.png&amp;diff=78095"/>
		<updated>2025-10-02T20:55:37Z</updated>

		<summary type="html">&lt;p&gt;Tmo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Scope auth gmail.send&lt;/div&gt;</summary>
		<author><name>Tmo</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=File:GoogleScopeMailGoogleCom.png&amp;diff=78092</id>
		<title>File:GoogleScopeMailGoogleCom.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=File:GoogleScopeMailGoogleCom.png&amp;diff=78092"/>
		<updated>2025-10-02T20:54:30Z</updated>

		<summary type="html">&lt;p&gt;Tmo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Scope mail.google.com&lt;/div&gt;</summary>
		<author><name>Tmo</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=File:GoogleOAuthScopes.png&amp;diff=78091</id>
		<title>File:GoogleOAuthScopes.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=File:GoogleOAuthScopes.png&amp;diff=78091"/>
		<updated>2025-10-02T20:53:45Z</updated>

		<summary type="html">&lt;p&gt;Tmo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;OAuth scopes&lt;/div&gt;</summary>
		<author><name>Tmo</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=File:GoogleOAuthConsentScreen.png&amp;diff=78089</id>
		<title>File:GoogleOAuthConsentScreen.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=File:GoogleOAuthConsentScreen.png&amp;diff=78089"/>
		<updated>2025-10-02T20:53:16Z</updated>

		<summary type="html">&lt;p&gt;Tmo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;OAuth consent screen&lt;/div&gt;</summary>
		<author><name>Tmo</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=File:GoogleCredentialsUserData.png&amp;diff=78088</id>
		<title>File:GoogleCredentialsUserData.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=File:GoogleCredentialsUserData.png&amp;diff=78088"/>
		<updated>2025-10-02T20:52:38Z</updated>

		<summary type="html">&lt;p&gt;Tmo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Credentials user data&lt;/div&gt;</summary>
		<author><name>Tmo</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=File:GoogleCreateCredentialsHelpMeChoose.png&amp;diff=78086</id>
		<title>File:GoogleCreateCredentialsHelpMeChoose.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=File:GoogleCreateCredentialsHelpMeChoose.png&amp;diff=78086"/>
		<updated>2025-10-02T20:52:04Z</updated>

		<summary type="html">&lt;p&gt;Tmo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Create credentials, help me choose&lt;/div&gt;</summary>
		<author><name>Tmo</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=File:GoogleGmailApiAdded.png&amp;diff=78085</id>
		<title>File:GoogleGmailApiAdded.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=File:GoogleGmailApiAdded.png&amp;diff=78085"/>
		<updated>2025-10-02T20:51:10Z</updated>

		<summary type="html">&lt;p&gt;Tmo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Gmail API added&lt;/div&gt;</summary>
		<author><name>Tmo</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=File:GoogleAddGmailApi.png&amp;diff=78084</id>
		<title>File:GoogleAddGmailApi.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=File:GoogleAddGmailApi.png&amp;diff=78084"/>
		<updated>2025-10-02T20:50:36Z</updated>

		<summary type="html">&lt;p&gt;Tmo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Add Gmail API&lt;/div&gt;</summary>
		<author><name>Tmo</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=File:GoogleGmailApis.png&amp;diff=78083</id>
		<title>File:GoogleGmailApis.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=File:GoogleGmailApis.png&amp;diff=78083"/>
		<updated>2025-10-02T20:50:04Z</updated>

		<summary type="html">&lt;p&gt;Tmo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Gmail APIs&lt;/div&gt;</summary>
		<author><name>Tmo</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=File:GoogleApisServicesApiLibrary.png&amp;diff=78082</id>
		<title>File:GoogleApisServicesApiLibrary.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=File:GoogleApisServicesApiLibrary.png&amp;diff=78082"/>
		<updated>2025-10-02T20:49:29Z</updated>

		<summary type="html">&lt;p&gt;Tmo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;APIs Services API Library&lt;/div&gt;</summary>
		<author><name>Tmo</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=File:GoogleApisServicesLibrary.png&amp;diff=78081</id>
		<title>File:GoogleApisServicesLibrary.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=File:GoogleApisServicesLibrary.png&amp;diff=78081"/>
		<updated>2025-10-02T20:48:34Z</updated>

		<summary type="html">&lt;p&gt;Tmo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Apis Services Library&lt;/div&gt;</summary>
		<author><name>Tmo</name></author>
	</entry>
</feed>