<?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=Bsiegwald</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=Bsiegwald"/>
	<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Special:Contributions/Bsiegwald"/>
	<updated>2026-05-09T09:06:42Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.42.3</generator>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Howto:DE_-_Deutsche_Telekom_-_CompanyFlex_TLS_SIP-Provider_(2020)&amp;diff=77310</id>
		<title>Howto:DE - Deutsche Telekom - CompanyFlex TLS SIP-Provider (2020)</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Howto:DE_-_Deutsche_Telekom_-_CompanyFlex_TLS_SIP-Provider_(2020)&amp;diff=77310"/>
		<updated>2025-07-14T09:53:30Z</updated>

		<summary type="html">&lt;p&gt;Bsiegwald: /* Configuration */ addition of path to technical guidelines&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary == &lt;br /&gt;
{{Template:SIP_TEST_STATUS_complete|update=November 19th, 2020|url=https://geschaeftskunden.telekom.de/internet-dsl/tarife/festnetz-internet-dsl/companyflex|productname=CompanyFlex_TLS|providername=Deutsche_Telekom}}&lt;br /&gt;
&amp;lt;internal&amp;gt;Provider SBC: BroadWorks&amp;lt;/internal&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== {{SIP_TEST_ISSUES_MR_TITLE}} ===&lt;br /&gt;
{{SIP_TEST_ISSUES_MR_INTRO}}&lt;br /&gt;
; CLIR : {{SIP_TEST_FACT_CLIR}}&lt;br /&gt;
; EARLY MEDIA INBOUND : {{SIP_TEST_FACT_EARLY MEDIA INBOUND}}&lt;br /&gt;
; FAX T38 ONNET : {{SIP_TEST_FACT_FAX T38 ONNET}}&lt;br /&gt;
; FAX T38 : {{SIP_TEST_FACT_FAX T38}}&lt;br /&gt;
; FAX T38ANDAUDIO : {{SIP_TEST_FACT_FAX T38ANDAUDIO}}&lt;br /&gt;
; SDP VIDEO : {{SIP_TEST_FACT_SDP VIDEO}}&lt;br /&gt;
; SIP INFO : {{SIP_TEST_FACT_SIP INFO}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;{{SIP_TEST_FACTS_LIST}} [[Template:SIP TEST FACT DESCRIPTION TEST 180 RINGING FAILS|180_RINGING]], [[Template:SIP TEST FACT DESCRIPTION TEST BASIC CALL FAILS|BASIC_CALL]], [[Template:SIP TEST FACT DESCRIPTION TEST CLIR FAILS|CLIR]], [[Template:SIP TEST FACT DESCRIPTION TEST CLNS ONNET FAILS|CLNS_ONNET]], [[Template:SIP TEST FACT DESCRIPTION TEST CLNS FAILS|CLNS]], [[Template:SIP TEST FACT DESCRIPTION TEST CONN NR DIFF FAILS|CONN_NR_DIFF]], [[Template:SIP TEST FACT DESCRIPTION TEST CONN NR INCOMING FAILS|CONN_NR_INCOMING]], [[Template:SIP TEST FACT DESCRIPTION TEST CONN NR FAILS|CONN_NR]], [[Template:SIP TEST FACT DESCRIPTION TEST DTMF FAILS|DTMF]], [[Template:SIP TEST FACT DESCRIPTION TEST EARLY MEDIA INBOUND FAILS|EARLY_MEDIA_INBOUND]], [[Template:SIP TEST FACT DESCRIPTION TEST FAX AUDIO FAILS|FAX_AUDIO]], [[Template:SIP TEST FACT DESCRIPTION TEST FAX T38 ONNET FAILS|FAX_T38_ONNET]], [[Template:SIP TEST FACT DESCRIPTION TEST FAX T38 FAILS|FAX_T38]], [[Template:SIP TEST FACT DESCRIPTION TEST FAX T38ANDAUDIO FAILS|FAX_T38ANDAUDIO]], [[Template:SIP TEST FACT DESCRIPTION TEST G711A ONNET FAILS|G711A_ONNET]], [[Template:SIP TEST FACT DESCRIPTION TEST G711A FAILS|G711A]], [[Template:SIP TEST FACT DESCRIPTION TEST G711U ONNET FAILS|G711U_ONNET]], [[Template:SIP TEST FACT DESCRIPTION TEST G711U FAILS|G711U]], [[Template:SIP TEST FACT DESCRIPTION TEST G722 ONNET FAILS|G722_ONNET]], [[Template:SIP TEST FACT DESCRIPTION TEST G722 FAILS|G722]], [[Template:SIP TEST FACT DESCRIPTION TEST G729 ONNET FAILS|G729_ONNET]], [[Template:SIP TEST FACT DESCRIPTION TEST G729 FAILS|G729]], [[Template:SIP TEST FACT DESCRIPTION TEST HOLD RETRIEVE FAILS|HOLD_RETRIEVE]], [[Template:SIP TEST FACT DESCRIPTION TEST IP FRAGMENTATION FAILS|IP_FRAGMENTATION]], [[Template:SIP TEST FACT DESCRIPTION TEST LARGE SIP MESSAGES FAILS|LARGE_SIP_MESSAGES]], [[Template:SIP TEST FACT DESCRIPTION TEST MOBILITY FAILS|MOBILITY]], [[Template:SIP TEST FACT DESCRIPTION TEST OPUS NB FAILS|OPUS_NB]], [[Template:SIP TEST FACT DESCRIPTION TEST OPUS WB FAILS|OPUS_WB]], [[Template:SIP TEST FACT DESCRIPTION TEST RALERT DISC FAILS|RALERT_DISC]], [[Template:SIP TEST FACT DESCRIPTION TEST REDIR 302 FAILS|REDIR_302]], [[Template:SIP TEST FACT DESCRIPTION TEST REDIR DIVHDR FAILS|REDIR_DIVHDR]], [[Template:SIP TEST FACT DESCRIPTION TEST REDIR HISTHDR FAILS|REDIR_HISTHDR]], [[Template:SIP TEST FACT DESCRIPTION TEST REVERSE MEDIA FAILS|REVERSE_MEDIA]], [[Template:SIP TEST FACT DESCRIPTION TEST SDP ICE FAILS|SDP_ICE]], [[Template:SIP TEST FACT DESCRIPTION TEST SDP RTCP MUX FAILS|SDP_RTCP_MUX]], [[Template:SIP TEST FACT DESCRIPTION TEST SDP VIDEO FAILS|SDP_VIDEO]], [[Template:SIP TEST FACT DESCRIPTION TEST SIP INFO FAILS|SIP_INFO]], [[Template:SIP TEST FACT DESCRIPTION TEST SRTP INCOMING FAILS|SRTP_INCOMING]], [[Template:SIP TEST FACT DESCRIPTION TEST SRTP INTERNAL FAILS|SRTP_INTERNAL]], [[Template:SIP TEST FACT DESCRIPTION TEST SRTP OUTGOING FAILS|SRTP_OUTGOING]], [[Template:SIP TEST FACT DESCRIPTION TEST SUBSCRIBER NR FAILS|SUBSCRIBER_NR]], [[Template:SIP TEST FACT DESCRIPTION TEST XFER BLIND FAILS|XFER_BLIND]], [[Template:SIP TEST FACT DESCRIPTION TEST XFER CONS ALERT FAILS|XFER_CONS_ALERT]], [[Template:SIP TEST FACT DESCRIPTION TEST XFER CONS EXT FAILS|XFER_CONS_EXT]], [[Template:SIP TEST FACT DESCRIPTION TEST XFER CONS FAILS|XFER_CONS]]&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Test Results ==&lt;br /&gt;
{{SIP_TEST_TESTRESULT_ONLYMR_INTRO}}&lt;br /&gt;
=== {{SIP_TEST_RESULTS_MR_TITLE}} ===&lt;br /&gt;
; Registration : {{Template:SIP_Profile_Test_Registration_TCP_no_UDP}}&lt;br /&gt;
&lt;br /&gt;
; NAT Traversal : {{Template:SIP_Profile_Test_NAT_a_no_c}} &lt;br /&gt;
&lt;br /&gt;
; DTMF (RFC2833) : {{Template:SIP_Profile_Test_DTMF_RFC2833_yes}}&lt;br /&gt;
&lt;br /&gt;
; Session Timer : {{Template:SIP_Profile_Test_EXPIRES_yes}}&lt;br /&gt;
&lt;br /&gt;
; Redundancy : {{Template:SIP_Profile_Test_REDUNDANCY_no}}&lt;br /&gt;
&lt;br /&gt;
; Correct signalling of Ringing-state : {{Template:SIP_Profile_Test_RINGING_yes}}&lt;br /&gt;
&lt;br /&gt;
; CLIR : {{Template:SIP_Profile_Test_CLIR_no}}&lt;br /&gt;
&lt;br /&gt;
; Clip No Screening (CLNS) : {{Template:SIP_Profile_Test_CLNS_yes}} {{Template:SIP_Profile_Test_CLNS_clns_302_not_recommended}}&lt;br /&gt;
&lt;br /&gt;
; COLP : {{Template:SIP_Profile_Test_COLP_out_yes_in_yes}} {{Template:SIP_Profile_Test_COLP_diff_no}}&lt;br /&gt;
&lt;br /&gt;
; Early-Media : {{Template:SIP_Profile_Test_EARLY_MEDIA_INBOUND_no}}&lt;br /&gt;
&lt;br /&gt;
; Fax : {{Template:SIP_Profile_Test_AUDIOFAX_PSTN_yes}}&lt;br /&gt;
: {{Template:SIP_Profile_Test_T38_PSTN_no_onnet_no_fallback_no}}&lt;br /&gt;
&lt;br /&gt;
; Codecs : supported to/from PSTN: G711A&lt;br /&gt;
: supported onnet (VoIP to VoIP): G711A, G711U and G722&lt;br /&gt;
&lt;br /&gt;
; IP-Fragmentation : {{Template:SIP_Profile_Test_FRAGMENTATION_yes}}&lt;br /&gt;
&lt;br /&gt;
; Large SIP messages : {{Template:SIP_Profile_Test_LARGE_MESSAGES_yes}}&lt;br /&gt;
&lt;br /&gt;
; Reverse Media Negotiation : {{Template:SIP_Profile_Test_REV_MEDIA_NEG_yes}}&lt;br /&gt;
&lt;br /&gt;
; Mobility Calls :  {{Template:SIP_Profile_Test_MobilityCall_no_with_MediaRelay}}&lt;br /&gt;
&lt;br /&gt;
; SRTP : {{Template:SIP_Profile_Test_SRTP_yes}}&lt;br /&gt;
&lt;br /&gt;
; Dialing of Subscriber Numbers : {{Template:SIP_Profile_Test_SUBSCRIBER_NR_no}}&lt;br /&gt;
&lt;br /&gt;
; Call Transfer : {{Template:SIP_Profile_Test_CALL_TRANSFER_ok}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Configuration==&lt;br /&gt;
Use profile &#039;&#039;DE-Deutsche_Telekom-CompanyFlex_TLS&#039;&#039; in &#039;&#039;Gateway/Interfaces/SIP&#039;&#039; to configure this SIP provider.&lt;br /&gt;
&lt;br /&gt;
Please note the following configuration hints:&lt;br /&gt;
* If you intend to use SIPS (SIP/TLS) registration, you need to add the &#039; T-TeleSec GlobalRoot Class 2&#039; ([https://hilfe.companyflex.de/de/endgeraete/ueberblick#_182050 Hardware von Drittherstellern &amp;amp; Verschlüsselung am Fremdanschluss], [https://www.telekom.de/hilfe/geraete/service/umwelt/schnittstellenbeschreibung-downloads?wt_mc=alias_1254_schnittstellenbeschreibungen&amp;amp;samChecked=true 1TR119]) certificate to the trust list of your SBC&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;Dialling of subscriber numbers not possible, &#039;Dialing Location&#039; must be configured without &#039;Area Code&#039;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: {{SIP_TEST_V12_HINT}}&lt;br /&gt;
&lt;br /&gt;
==Multi Location==&lt;br /&gt;
It&#039;s possible to have different MSNs and DDIs from different locations on the same trunk. But this is limited to 60 number objects. A number object is an MSN or the first DDI digit. So a complete DDI block from 0 to 9 (0-99 or 0-999) is counted as 10 number objects.&lt;br /&gt;
==SIP Redundancy==&lt;br /&gt;
In case of SIP redundancy the username should be in the format &amp;quot;+49199296000000XXXXXX@tel.t-online.de&amp;quot; so the feature &amp;quot;Call Routing for redundant SIP-Trunks&amp;quot; works correctly.&lt;br /&gt;
== Sending non 100 replies==&lt;br /&gt;
The Telekom CompanyFlex has a default supervision timer of 3 seconds to receive a response to their INVITE with an 18x message, if this timer expires the call can be canceled. The supervision timer can be configured per trunk group in the CompanyFlex portal.&lt;br /&gt;
This timer can be triggered in cases where a receiving endpoint takes too long to give an alert message, ie: myAPPS running on a smartphone device that takes longer to &amp;quot;wake up&amp;quot; or a mobility call via GSM that has more delay than the GSM network.&lt;br /&gt;
Source: Page 25 of the Technical Specification of the SIP Trunking Interface for CompanyFlex of Deutsche Telekom - 1TR119 - Version 1.12.0 - 28. November 2022&lt;br /&gt;
== Correct DNS Server==&lt;br /&gt;
To operate CompanyFlex is necessary to use a correct DNS Server either provided by Telekom connection or with special feature required if not an ISP connection from Telekom to avoid issues with SIP Registration. More information can be found [https://hilfe.companyflex.de/de/grundlagen/systemvoraussetzungen here].&lt;br /&gt;
&lt;br /&gt;
== Using Endpoints without Encryption in the PBX==&lt;br /&gt;
In case we operate a 3rd Party SIP endpoint that don&#039;t support Encryption, so the flag Media-relay+No SRTP is enabled on the User Object of that endpoint is recommended to switch the Protocol used for the internal registration of the SIP Trunk from H.323 to SIP to avoid media negotiation issues in some specific call scenarios like CFNR.&lt;br /&gt;
&lt;br /&gt;
== Disclaimer ==&lt;br /&gt;
{{SIP_TEST_PREFACE}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Compat|{{PAGENAME}}]]&lt;br /&gt;
[[Category:3rdParty SIP Provider|{{PAGENAME}}]]&lt;/div&gt;</summary>
		<author><name>Bsiegwald</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Howto:DE_-_Deutsche_Telekom_-_CompanyFlex_TLS_SIP-Provider_(2020)&amp;diff=77309</id>
		<title>Howto:DE - Deutsche Telekom - CompanyFlex TLS SIP-Provider (2020)</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Howto:DE_-_Deutsche_Telekom_-_CompanyFlex_TLS_SIP-Provider_(2020)&amp;diff=77309"/>
		<updated>2025-07-14T09:34:22Z</updated>

		<summary type="html">&lt;p&gt;Bsiegwald: /* Configuration */ Update needed certificate for trust list + source&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary == &lt;br /&gt;
{{Template:SIP_TEST_STATUS_complete|update=November 19th, 2020|url=https://geschaeftskunden.telekom.de/internet-dsl/tarife/festnetz-internet-dsl/companyflex|productname=CompanyFlex_TLS|providername=Deutsche_Telekom}}&lt;br /&gt;
&amp;lt;internal&amp;gt;Provider SBC: BroadWorks&amp;lt;/internal&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== {{SIP_TEST_ISSUES_MR_TITLE}} ===&lt;br /&gt;
{{SIP_TEST_ISSUES_MR_INTRO}}&lt;br /&gt;
; CLIR : {{SIP_TEST_FACT_CLIR}}&lt;br /&gt;
; EARLY MEDIA INBOUND : {{SIP_TEST_FACT_EARLY MEDIA INBOUND}}&lt;br /&gt;
; FAX T38 ONNET : {{SIP_TEST_FACT_FAX T38 ONNET}}&lt;br /&gt;
; FAX T38 : {{SIP_TEST_FACT_FAX T38}}&lt;br /&gt;
; FAX T38ANDAUDIO : {{SIP_TEST_FACT_FAX T38ANDAUDIO}}&lt;br /&gt;
; SDP VIDEO : {{SIP_TEST_FACT_SDP VIDEO}}&lt;br /&gt;
; SIP INFO : {{SIP_TEST_FACT_SIP INFO}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;{{SIP_TEST_FACTS_LIST}} [[Template:SIP TEST FACT DESCRIPTION TEST 180 RINGING FAILS|180_RINGING]], [[Template:SIP TEST FACT DESCRIPTION TEST BASIC CALL FAILS|BASIC_CALL]], [[Template:SIP TEST FACT DESCRIPTION TEST CLIR FAILS|CLIR]], [[Template:SIP TEST FACT DESCRIPTION TEST CLNS ONNET FAILS|CLNS_ONNET]], [[Template:SIP TEST FACT DESCRIPTION TEST CLNS FAILS|CLNS]], [[Template:SIP TEST FACT DESCRIPTION TEST CONN NR DIFF FAILS|CONN_NR_DIFF]], [[Template:SIP TEST FACT DESCRIPTION TEST CONN NR INCOMING FAILS|CONN_NR_INCOMING]], [[Template:SIP TEST FACT DESCRIPTION TEST CONN NR FAILS|CONN_NR]], [[Template:SIP TEST FACT DESCRIPTION TEST DTMF FAILS|DTMF]], [[Template:SIP TEST FACT DESCRIPTION TEST EARLY MEDIA INBOUND FAILS|EARLY_MEDIA_INBOUND]], [[Template:SIP TEST FACT DESCRIPTION TEST FAX AUDIO FAILS|FAX_AUDIO]], [[Template:SIP TEST FACT DESCRIPTION TEST FAX T38 ONNET FAILS|FAX_T38_ONNET]], [[Template:SIP TEST FACT DESCRIPTION TEST FAX T38 FAILS|FAX_T38]], [[Template:SIP TEST FACT DESCRIPTION TEST FAX T38ANDAUDIO FAILS|FAX_T38ANDAUDIO]], [[Template:SIP TEST FACT DESCRIPTION TEST G711A ONNET FAILS|G711A_ONNET]], [[Template:SIP TEST FACT DESCRIPTION TEST G711A FAILS|G711A]], [[Template:SIP TEST FACT DESCRIPTION TEST G711U ONNET FAILS|G711U_ONNET]], [[Template:SIP TEST FACT DESCRIPTION TEST G711U FAILS|G711U]], [[Template:SIP TEST FACT DESCRIPTION TEST G722 ONNET FAILS|G722_ONNET]], [[Template:SIP TEST FACT DESCRIPTION TEST G722 FAILS|G722]], [[Template:SIP TEST FACT DESCRIPTION TEST G729 ONNET FAILS|G729_ONNET]], [[Template:SIP TEST FACT DESCRIPTION TEST G729 FAILS|G729]], [[Template:SIP TEST FACT DESCRIPTION TEST HOLD RETRIEVE FAILS|HOLD_RETRIEVE]], [[Template:SIP TEST FACT DESCRIPTION TEST IP FRAGMENTATION FAILS|IP_FRAGMENTATION]], [[Template:SIP TEST FACT DESCRIPTION TEST LARGE SIP MESSAGES FAILS|LARGE_SIP_MESSAGES]], [[Template:SIP TEST FACT DESCRIPTION TEST MOBILITY FAILS|MOBILITY]], [[Template:SIP TEST FACT DESCRIPTION TEST OPUS NB FAILS|OPUS_NB]], [[Template:SIP TEST FACT DESCRIPTION TEST OPUS WB FAILS|OPUS_WB]], [[Template:SIP TEST FACT DESCRIPTION TEST RALERT DISC FAILS|RALERT_DISC]], [[Template:SIP TEST FACT DESCRIPTION TEST REDIR 302 FAILS|REDIR_302]], [[Template:SIP TEST FACT DESCRIPTION TEST REDIR DIVHDR FAILS|REDIR_DIVHDR]], [[Template:SIP TEST FACT DESCRIPTION TEST REDIR HISTHDR FAILS|REDIR_HISTHDR]], [[Template:SIP TEST FACT DESCRIPTION TEST REVERSE MEDIA FAILS|REVERSE_MEDIA]], [[Template:SIP TEST FACT DESCRIPTION TEST SDP ICE FAILS|SDP_ICE]], [[Template:SIP TEST FACT DESCRIPTION TEST SDP RTCP MUX FAILS|SDP_RTCP_MUX]], [[Template:SIP TEST FACT DESCRIPTION TEST SDP VIDEO FAILS|SDP_VIDEO]], [[Template:SIP TEST FACT DESCRIPTION TEST SIP INFO FAILS|SIP_INFO]], [[Template:SIP TEST FACT DESCRIPTION TEST SRTP INCOMING FAILS|SRTP_INCOMING]], [[Template:SIP TEST FACT DESCRIPTION TEST SRTP INTERNAL FAILS|SRTP_INTERNAL]], [[Template:SIP TEST FACT DESCRIPTION TEST SRTP OUTGOING FAILS|SRTP_OUTGOING]], [[Template:SIP TEST FACT DESCRIPTION TEST SUBSCRIBER NR FAILS|SUBSCRIBER_NR]], [[Template:SIP TEST FACT DESCRIPTION TEST XFER BLIND FAILS|XFER_BLIND]], [[Template:SIP TEST FACT DESCRIPTION TEST XFER CONS ALERT FAILS|XFER_CONS_ALERT]], [[Template:SIP TEST FACT DESCRIPTION TEST XFER CONS EXT FAILS|XFER_CONS_EXT]], [[Template:SIP TEST FACT DESCRIPTION TEST XFER CONS FAILS|XFER_CONS]]&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Test Results ==&lt;br /&gt;
{{SIP_TEST_TESTRESULT_ONLYMR_INTRO}}&lt;br /&gt;
=== {{SIP_TEST_RESULTS_MR_TITLE}} ===&lt;br /&gt;
; Registration : {{Template:SIP_Profile_Test_Registration_TCP_no_UDP}}&lt;br /&gt;
&lt;br /&gt;
; NAT Traversal : {{Template:SIP_Profile_Test_NAT_a_no_c}} &lt;br /&gt;
&lt;br /&gt;
; DTMF (RFC2833) : {{Template:SIP_Profile_Test_DTMF_RFC2833_yes}}&lt;br /&gt;
&lt;br /&gt;
; Session Timer : {{Template:SIP_Profile_Test_EXPIRES_yes}}&lt;br /&gt;
&lt;br /&gt;
; Redundancy : {{Template:SIP_Profile_Test_REDUNDANCY_no}}&lt;br /&gt;
&lt;br /&gt;
; Correct signalling of Ringing-state : {{Template:SIP_Profile_Test_RINGING_yes}}&lt;br /&gt;
&lt;br /&gt;
; CLIR : {{Template:SIP_Profile_Test_CLIR_no}}&lt;br /&gt;
&lt;br /&gt;
; Clip No Screening (CLNS) : {{Template:SIP_Profile_Test_CLNS_yes}} {{Template:SIP_Profile_Test_CLNS_clns_302_not_recommended}}&lt;br /&gt;
&lt;br /&gt;
; COLP : {{Template:SIP_Profile_Test_COLP_out_yes_in_yes}} {{Template:SIP_Profile_Test_COLP_diff_no}}&lt;br /&gt;
&lt;br /&gt;
; Early-Media : {{Template:SIP_Profile_Test_EARLY_MEDIA_INBOUND_no}}&lt;br /&gt;
&lt;br /&gt;
; Fax : {{Template:SIP_Profile_Test_AUDIOFAX_PSTN_yes}}&lt;br /&gt;
: {{Template:SIP_Profile_Test_T38_PSTN_no_onnet_no_fallback_no}}&lt;br /&gt;
&lt;br /&gt;
; Codecs : supported to/from PSTN: G711A&lt;br /&gt;
: supported onnet (VoIP to VoIP): G711A, G711U and G722&lt;br /&gt;
&lt;br /&gt;
; IP-Fragmentation : {{Template:SIP_Profile_Test_FRAGMENTATION_yes}}&lt;br /&gt;
&lt;br /&gt;
; Large SIP messages : {{Template:SIP_Profile_Test_LARGE_MESSAGES_yes}}&lt;br /&gt;
&lt;br /&gt;
; Reverse Media Negotiation : {{Template:SIP_Profile_Test_REV_MEDIA_NEG_yes}}&lt;br /&gt;
&lt;br /&gt;
; Mobility Calls :  {{Template:SIP_Profile_Test_MobilityCall_no_with_MediaRelay}}&lt;br /&gt;
&lt;br /&gt;
; SRTP : {{Template:SIP_Profile_Test_SRTP_yes}}&lt;br /&gt;
&lt;br /&gt;
; Dialing of Subscriber Numbers : {{Template:SIP_Profile_Test_SUBSCRIBER_NR_no}}&lt;br /&gt;
&lt;br /&gt;
; Call Transfer : {{Template:SIP_Profile_Test_CALL_TRANSFER_ok}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Configuration==&lt;br /&gt;
Use profile &#039;&#039;DE-Deutsche_Telekom-CompanyFlex_TLS&#039;&#039; in &#039;&#039;Gateway/Interfaces/SIP&#039;&#039; to configure this SIP provider.&lt;br /&gt;
&lt;br /&gt;
Please note the following configuration hints:&lt;br /&gt;
* If you intend to use SIPS (SIP/TLS) registration, you need to add the &#039; T-TeleSec GlobalRoot Class 2&#039; ([https://hilfe.companyflex.de/de/endgeraete/ueberblick#_182050 Hardware von Drittherstellern &amp;amp; Verschlüsselung am Fremdanschluss]) certificate to the trust list of your SBC&lt;br /&gt;
* &amp;lt;nowiki&amp;gt;Dialling of subscriber numbers not possible, &#039;Dialing Location&#039; must be configured without &#039;Area Code&#039;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
: {{SIP_TEST_V12_HINT}}&lt;br /&gt;
&lt;br /&gt;
==Multi Location==&lt;br /&gt;
It&#039;s possible to have different MSNs and DDIs from different locations on the same trunk. But this is limited to 60 number objects. A number object is an MSN or the first DDI digit. So a complete DDI block from 0 to 9 (0-99 or 0-999) is counted as 10 number objects.&lt;br /&gt;
==SIP Redundancy==&lt;br /&gt;
In case of SIP redundancy the username should be in the format &amp;quot;+49199296000000XXXXXX@tel.t-online.de&amp;quot; so the feature &amp;quot;Call Routing for redundant SIP-Trunks&amp;quot; works correctly.&lt;br /&gt;
== Sending non 100 replies==&lt;br /&gt;
The Telekom CompanyFlex has a default supervision timer of 3 seconds to receive a response to their INVITE with an 18x message, if this timer expires the call can be canceled. The supervision timer can be configured per trunk group in the CompanyFlex portal.&lt;br /&gt;
This timer can be triggered in cases where a receiving endpoint takes too long to give an alert message, ie: myAPPS running on a smartphone device that takes longer to &amp;quot;wake up&amp;quot; or a mobility call via GSM that has more delay than the GSM network.&lt;br /&gt;
Source: Page 25 of the Technical Specification of the SIP Trunking Interface for CompanyFlex of Deutsche Telekom - 1TR119 - Version 1.12.0 - 28. November 2022&lt;br /&gt;
== Correct DNS Server==&lt;br /&gt;
To operate CompanyFlex is necessary to use a correct DNS Server either provided by Telekom connection or with special feature required if not an ISP connection from Telekom to avoid issues with SIP Registration. More information can be found [https://hilfe.companyflex.de/de/grundlagen/systemvoraussetzungen here].&lt;br /&gt;
&lt;br /&gt;
== Using Endpoints without Encryption in the PBX==&lt;br /&gt;
In case we operate a 3rd Party SIP endpoint that don&#039;t support Encryption, so the flag Media-relay+No SRTP is enabled on the User Object of that endpoint is recommended to switch the Protocol used for the internal registration of the SIP Trunk from H.323 to SIP to avoid media negotiation issues in some specific call scenarios like CFNR.&lt;br /&gt;
&lt;br /&gt;
== Disclaimer ==&lt;br /&gt;
{{SIP_TEST_PREFACE}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Compat|{{PAGENAME}}]]&lt;br /&gt;
[[Category:3rdParty SIP Provider|{{PAGENAME}}]]&lt;/div&gt;</summary>
		<author><name>Bsiegwald</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Howto13r2:Setting_up_Calendar_with_OAuth2&amp;diff=76051</id>
		<title>Howto13r2:Setting up Calendar with OAuth2</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Howto13r2:Setting_up_Calendar_with_OAuth2&amp;diff=76051"/>
		<updated>2025-03-30T14:27:39Z</updated>

		<summary type="html">&lt;p&gt;Bsiegwald: Reference to impersonation deprecation and alternative with app-only authentication&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= How-to setup the Calendar for OAuth2 =&lt;br /&gt;
This tutorial shows you, how to setup an Azure Active Directory App to let the calendar work with Microsoft 365 and OAuth2. Please note, that this is not a complete administration guide. Instead, it is a simply step-by-step tutorial which should work but maybe not the most accurate administration of your Azure AD – it’s just the way how we managed to use it. It is highly recommended to ask your Azure Administrator for details and / or read the Microsoft documentation. It is expected, that you have an Exchange user with the Application Impersonation right. More information about how to assign this role to a user can be found in the Microsoft documentation.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Note:&#039;&#039;&#039;&#039;&#039; The screenshot and labels may change because of updates done by Microsoft. The following steps had been made with the version with the Azure portal from August 2021. Note also that the images are scaled. If you need a sharper image, just click on it to see it in full size&lt;br /&gt;
&lt;br /&gt;
== Preparation ==&lt;br /&gt;
During the creation of an app, you need some information provided by the configuration of the CalendarApp and also add some information given by Azure. Because of that it is recommended to open the PBX Manager / AP Calendar in myApps (click on Configure and select “Cloud (Exchange Online)” as Sync Type) and the Azure Portal in your browser at the same time. You also have to login to the Azure Portal with an admin user to be able to add an application registration as well as to configure it.&lt;br /&gt;
&lt;br /&gt;
If you get stuck or you need additional information, or if you are unsure if the way describe here is the best solution for your company, be free to use all the documentation and help links Microsoft provides in the Azure portal.&lt;br /&gt;
&lt;br /&gt;
= Registering the Calendar app to the Azure Active Directory =&lt;br /&gt;
== Open the Azure Portal Active Directory ==&lt;br /&gt;
[[Image:AD_SelAD.png|thumb|upright=5.0|right|Azure Portal]]&lt;br /&gt;
[[Image:AD_Overview.png|thumb|Azure Active Directory Overview]]&lt;br /&gt;
* Go to the [https://portal.azure.com Azure Portal homepage] and sign in with your admin user&lt;br /&gt;
** Select “Manage Azure Active Directory” or click on one of the “Azure Active Directory” links.&lt;br /&gt;
** You will be redirected to the Azure Active Directory Overview&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Add a new App registration ==&lt;br /&gt;
[[Image:AD_CreateAppRegistration.png|thumb|Add new app registration]]&lt;br /&gt;
[[Image:AD_RegisteredAppOverview.png|thumb|Registered app overview]]&lt;br /&gt;
* Create an app registration&lt;br /&gt;
** Click on “+ Add” and select “App registration” (alternatively click on “App Registration” on the side bar and add an App registration by clicking on “New registration”)&lt;br /&gt;
** Set a name for the registration (e. G. innovaphone Calendar)&lt;br /&gt;
** Select the supported account type (see note below).&lt;br /&gt;
** Select &amp;quot;Web&amp;quot; in the dropdown list under &amp;quot;Redirect URI&amp;quot; (just enter the URI that you can find in the &amp;quot;Redirect URI&amp;quot; field of the PBX Manager / Calendar configuration).&lt;br /&gt;
** Click &amp;quot;Register&amp;quot; to save the App Registration. On success, you should see the overview page for the registered app.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; The account type should be either “Accounts in this organizational directory only (YourCompanyName only - Single tenant)” (which is recommended) or “Accounts in any organizational directory (YourCompanyName - Multitenant)”. If you go with the single tenant, you have to select “My organization only” in as “Selected account types” for the Calendar configuration. If you select multitenant, “Multiple organizations” have to be configured.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Configure the client secret ==&lt;br /&gt;
[[Image:AD_CreateClientSecret2.png|thumb|Create client secret]]&lt;br /&gt;
[[Image:AD_CreateClientSecretDone.png|thumb|Client secret list]]&lt;br /&gt;
* Click on “Certificates &amp;amp; Secrets” in the list on the left&lt;br /&gt;
** Then click on “New client secret” under the “Client secrets” section&lt;br /&gt;
** Define an expiration date (the client secret itself will be randomly created)&lt;br /&gt;
** Optional: add a description&lt;br /&gt;
** Click on &amp;quot;Add&amp;quot; - the secret should be visible in the list&lt;br /&gt;
** Copy the value (click in the icon beside the value) and insert it to the &amp;quot;Client secret&amp;quot; field in the Calendar configuration&lt;br /&gt;
&lt;br /&gt;
Note: after a couple of minutes, the Value of the client secret will be grayed out by Azure and you can’t copy it anymore. If that happens, just delete the old, create a new one and copy the value.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Configure the first permissions - the manifest ==&lt;br /&gt;
[[Image:AD_Manifest2.png|thumb|Manifest file]]&lt;br /&gt;
* Click on “Manifest” in the sidebar&lt;br /&gt;
** Scroll down the Manifest-File until you see the “requiredResourceAccess” property&lt;br /&gt;
** Add the data block from box below (including the &#039;,&#039;)&lt;br /&gt;
** Click on save - the manifest should similar to the one in the screenshot&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; If you want, you can replace the existing part with in the manifest with the block below (in that case without the comma after the closing ‘}’ bracket). This will remove the Users.Read right, which isn’t used anyways (but it also won’t hurt, if the right still exist).&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
     &amp;quot;resourceAppId&amp;quot;: &amp;quot;00000002-0000-0ff1-ce00-000000000000&amp;quot;,&lt;br /&gt;
     &amp;quot;resourceAccess&amp;quot;: [&lt;br /&gt;
         {&lt;br /&gt;
             &amp;quot;id&amp;quot;: &amp;quot;dc890d15-9560-4a4c-9b7f-a736ec74ec40&amp;quot;,&lt;br /&gt;
             &amp;quot;type&amp;quot;: &amp;quot;Role&amp;quot;&lt;br /&gt;
         }&lt;br /&gt;
     ]&lt;br /&gt;
 },&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Configure the second permissions - Microsoft Graph ==&lt;br /&gt;
[[Image:AD_APIPermissionsList2.png|thumb|Exchange Online - Full access as app]]&lt;br /&gt;
[[Image:AD_APIPermissions_EWS.png|thumb|EWS - Access all user]]&lt;br /&gt;
&lt;br /&gt;
* Click on API permissions on the right&lt;br /&gt;
** Due the changes in the manifest an entry &amp;quot;Office 365 Exchange Online&amp;quot; with the subitem &amp;quot;full_access_as_app&amp;quot; should be visible&lt;br /&gt;
** Click on “Add a permission”.&lt;br /&gt;
** In the following dialog click on “Microsoft Graph”&lt;br /&gt;
** Click on “Delegate permissions”&lt;br /&gt;
** Type “EWS” into the search field&lt;br /&gt;
** Click on the arrow before &amp;quot;EWS&amp;quot; and select “EWS.AccessAsUser.All”&lt;br /&gt;
** Click on &amp;quot;Add permission&amp;quot;&lt;br /&gt;
** You should see &amp;quot;EWS.AccessAsUser.All&amp;quot; under the &amp;quot;Microsoft Graph&amp;quot; section of the list&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
== Configure permission - set rights ==&lt;br /&gt;
[[Image:AD_APIPermissionsList.png|thumb|Permissions not granted]]&lt;br /&gt;
[[Image:AD_APIPermissions_AdminCosentGranted2.png|thumb|Permissions granted]]&lt;br /&gt;
* The permissions should may have the status &amp;quot;Not granted...&amp;quot; or no status at all.&lt;br /&gt;
** Click on &amp;quot;Grant admin consent for....&amp;quot; button above the list&lt;br /&gt;
** Confirm the question shown by a message box&lt;br /&gt;
** All premissions should now have the status &amp;quot;Granted for...&amp;quot;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
The Calendar app registration is now successfully completed.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Setting up the Calendar configuration on the App Platform =&lt;br /&gt;
* Open the PBX Manager in myApps, click on Calendar and then on &amp;quot;Configre&amp;quot; (if not already done)&lt;br /&gt;
** Set the fields like shown in the table below&lt;br /&gt;
** Click on &amp;quot;Authenticate&amp;quot; and follow the instructions&lt;br /&gt;
** On success, the Calendar OAuth2 configuration is completed&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
{| cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Field&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;Value&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|Sync-Type:&lt;br /&gt;
|Cloud (Exchange online)&lt;br /&gt;
|-&lt;br /&gt;
|User:&lt;br /&gt;
|The user with the Application Impersonation right in Exchange&lt;br /&gt;
|-&lt;br /&gt;
|Autodiscover URL:&lt;br /&gt;
|https://autodiscover-s.outlook.com&lt;br /&gt;
|-&lt;br /&gt;
|Exchange server to use: &lt;br /&gt;
|Either external or internal, depending on your configuration. However, external should be fine for most Exchange 365 installations.&lt;br /&gt;
|-&lt;br /&gt;
|Client ID:&lt;br /&gt;
|The Application (client) ID from you AD app registration&lt;br /&gt;
|-&lt;br /&gt;
|Supported account:&lt;br /&gt;
|“My organization only” or “Multiple organization”, depending what you configured during app registration (see above).&lt;br /&gt;
|-&lt;br /&gt;
|Redirect URI:&lt;br /&gt;
|Nothing to change here - leave it unchanged&lt;br /&gt;
|-&lt;br /&gt;
|Scopes:&lt;br /&gt;
|https://outlook.office365.com/.default&lt;br /&gt;
|-&lt;br /&gt;
|Client Secret:&lt;br /&gt;
|The value of the client secret you from your application registration (see above).&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Troubleshooting =&lt;br /&gt;
== Authenticating error with Autodiscover ==&lt;br /&gt;
If you run into authentication problems with the Autodiscover server, it can be that the default security settings are enabled for your Active Directory (which probably will be the case for new Exchange Online Setups). In that case, configure the security settings to allow access to the Autodiscover server or disable the default security settings, like described here:&lt;br /&gt;
&lt;br /&gt;
https://docs.microsoft.com/en-us/azure/active-directory/fundamentals/concept-fundamentals-security-defaults&lt;br /&gt;
&lt;br /&gt;
== Finding an alternative Autodiscover server ==&lt;br /&gt;
You can also try to find an alternative Autodiscover server by using the Microsoft Autodiscover V2 API. To do so, just enter the following URL to your browser (replacing the email address placeholder first): https://outlook.office365.com/autodiscover/autodiscover.json/v1.0/&amp;lt;Email-Address-Of-Your-Impersonation-User&amp;gt;?Protocol=AutodiscoverV1&lt;br /&gt;
&lt;br /&gt;
If your impersonation user has the email address impersonation@mycompany.com, the URL will be: https://outlook.office365.com/autodiscover/autodiscover.json/v1.0/impersonation@mycompany.com?Protocol=AutodiscoverV1&lt;br /&gt;
&lt;br /&gt;
You should receive a simple text message that may be similar to the following:&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;Protocol&amp;quot;:&amp;quot;AutodiscoverV1&amp;quot;,&amp;quot;Url&amp;quot;:&amp;quot;https://outlook.office365.com/autodiscover/autodiscover.xml&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
Your Autodiscover server will be the part from https to the first /autodiscover part (in this example https://outlook.office365.com)&lt;br /&gt;
&lt;br /&gt;
== Using On-Premises as fallback ==&lt;br /&gt;
If because of some configuration on the Exchange / Active Directory side or whatever reason the above guide won’t help, you still should be able to switch to On-Premises connection even with Exchange Online. Just configure the Calendar using the PBX Manager as follows:&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Field&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;Value&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|Sync-Type:&lt;br /&gt;
|On-Premises (local network)&lt;br /&gt;
|-&lt;br /&gt;
|User:&lt;br /&gt;
|The user with the Application Impersonation right in Exchange&lt;br /&gt;
|-&lt;br /&gt;
| Password:&lt;br /&gt;
| The password of the user&lt;br /&gt;
|-&lt;br /&gt;
|Autodiscover URL:&lt;br /&gt;
|https://autodiscover-s.outlook.com&lt;br /&gt;
|-&lt;br /&gt;
|Exchange server to use: &lt;br /&gt;
|Either external or internal, depending on your configuration. However, external should be fine for most Exchange 365 installations.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If the connection to the Autodiscover server failed, you can use the above way to get an alternative server and / or disable the default security settings for your AD.&lt;br /&gt;
&lt;br /&gt;
= Related Articles =&lt;br /&gt;
[[Support:Calendar App 13r3/14r1/14r2 - Exchange Online Impersonation Deprecation]] &amp;lt;br/&amp;gt;&lt;br /&gt;
[[Howto13r3:Setting up the Calendar App with OAuth2 and app-only authentication]] &amp;lt;br/&amp;gt;&lt;br /&gt;
[[Howto15r1:Configure Calendar Presence Sync by Connector for Microsoft365]]&lt;/div&gt;</summary>
		<author><name>Bsiegwald</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Howto:Firmware_Upgrade_V12r1_V12r2&amp;diff=71066</id>
		<title>Howto:Firmware Upgrade V12r1 V12r2</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Howto:Firmware_Upgrade_V12r1_V12r2&amp;diff=71066"/>
		<updated>2024-03-04T17:43:04Z</updated>

		<summary type="html">&lt;p&gt;Bsiegwald: Related Article linked to correct Howto category&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Applies To ==&lt;br /&gt;
This information applies to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- * All V11 capable innovaphone devices --&amp;gt;&lt;br /&gt;
* All PBX devices&lt;br /&gt;
* All DECT devices&lt;br /&gt;
* Linux Application Platform&lt;br /&gt;
&lt;br /&gt;
== Configuration Changes ==&lt;br /&gt;
&lt;br /&gt;
=== Changed Semantics of conditional Call Forward ===&lt;br /&gt;
From the beginning, phone numbers used as a condition in an E.164 setup needed to be configured as full numbers starting from the root node.  This is obviously wrong so that it has been fixed for v12r2 (see fix &#039;&#039;13402 - PBX use adjusted number for checking numbers on call forward&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
=== Apply updated SIP Provider Profiles ===&lt;br /&gt;
SIP provider profiles create a particular configuration once you save the it from the profile&#039;s configuration dialogue.  They do not change &amp;quot;under the hood&amp;quot;, even if you install a new firmware that may include updated settings. To apply such updated settings, you need to open the provider&#039;s configuration dialogue and apply it using the &#039;&#039;OK&#039;&#039; button.&lt;br /&gt;
&lt;br /&gt;
The SIP profile creates also automatically routing-table entries from and to the respective SIP-interface. An update of the SIP-profile by the OK button, will therefore also recreate these routing entries. As a result, modifications (e.g. CDPN-maps) of the profile-created-routes must be redone after updating the profile. To circumvent this problem, it is recommended to not modify the routes created by the profile but create additional routes for the own modifications.&lt;br /&gt;
&lt;br /&gt;
==Hardware Restrictions==&lt;br /&gt;
For a list of devices with no/restricted support in 12r2, see the [[Howto:Firmware_Upgrade#Version_12r2 | Firmware Upgrade article]].&lt;br /&gt;
&lt;br /&gt;
== Software Requirements ==&lt;br /&gt;
myPBX now requires .NET 4.5.2 (v12r1 only required .NET 4).&lt;br /&gt;
&lt;br /&gt;
==Known Problems==&lt;br /&gt;
=== Main Memory (RAM) Considerations ===&lt;br /&gt;
New firmware always has more features which in turn requires more resources. Growing firmware will thus consume both more flash and RAM for sure.  A given system configuration will run flawlessly after a firmware largely only if there is still enough memory left after boot.  As a rough rule of thumb, a v12r2 release will consume ~ 1 MB RAM and 0.4 MB flash more compared to a v12r1 firmware.&lt;br /&gt;
&lt;br /&gt;
Standard configurations which are according [[Howto:How_to_implement_large_PBXs#Technical_data_and_recommended_number_of_users_supported | to spec ]] will run on all supported hardware.  However, unusual configurations may not.  It is a good idea to examine both flash and RAM memory left on high load situations in your existing configuration to see if there is enough resources left for an upgrade.  Please find details in [[Reference:Device Health Check]].&lt;br /&gt;
&lt;br /&gt;
=== Flash Memory Considerations ===&lt;br /&gt;
New firmware comes with new code for new features which consumes more flash memory for the firmware image. For this reason, devices may run out of flash memory during upgrade to v12r2.  Here is the recommended procedure for upgrade on such devices:&lt;br /&gt;
&lt;br /&gt;
* save entire configuration&lt;br /&gt;
* reset to factory defaults&lt;br /&gt;
* load saved configuration (this will reorganize flash memory usage)&lt;br /&gt;
* upgrade to new firmware&lt;br /&gt;
&lt;br /&gt;
When there is still not enough flash memory available to store the new firmware, the web GUI will issue a &#039;&#039;Firmwareupdate failed:no space&#039;&#039; during firmware upload.  If the firmware upload is done using the update client, a &#039;&#039;Error 0x00130001 Major FLASHMAN0 no space&#039;&#039; event will occur. &lt;br /&gt;
&lt;br /&gt;
With the new firmware, the amount of flash memory allocatable for the LDAP directory (that is, PBX config and call lists) is less than before to accommodate for the larger requirements.  See &amp;lt;code&amp;gt;http://x.x.x.x/!mod%20cmd%20FLASHMAN0%20info%20state&amp;lt;/code&amp;gt; for details (after upgrade).&lt;br /&gt;
&lt;br /&gt;
On older IP110, IP200a, IP230 and IP240 phones, the SIP module has been removed from the firmware.&lt;br /&gt;
&lt;br /&gt;
== Related Articles ==&lt;br /&gt;
*[[Howto:Guideline V5 to V6 upgrade]]&lt;br /&gt;
*[[Howto:Upgrade Issues V5 to V6]]&lt;br /&gt;
*[[Howto:Firmware Upgrade V6 V7]]&lt;br /&gt;
*[[Howto:Firmware Upgrade V7 V8]]&lt;br /&gt;
*[[Howto:Firmware Upgrade V8 V9]]&lt;br /&gt;
*[[Howto:Firmware Upgrade V9 V10]]&lt;br /&gt;
*[[Howto:Firmware Upgrade V10 V11r1]]&lt;br /&gt;
*[[Howto:Firmware Upgrade V11r1 V11r2]]&lt;br /&gt;
*[[Support:Special_Precaution_required_when_upgrading_IPxx11_Gateways_from_pre-SR14_Firmware_Versions]]&lt;br /&gt;
* [[Howto:Firmware Upgrade V11r2 V12r1]]&lt;br /&gt;
* [[Howto13r1:Firmware_Upgrade_V12r2_V13r1]]&lt;br /&gt;
[[Category:Howto|{{PAGENAME}}]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Keywords:  --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bsiegwald</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Reference8:TAPI_Service_Provider&amp;diff=70253</id>
		<title>Reference8:TAPI Service Provider</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Reference8:TAPI_Service_Provider&amp;diff=70253"/>
		<updated>2023-12-14T16:58:51Z</updated>

		<summary type="html">&lt;p&gt;Bsiegwald: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The &#039;&#039;innovaphone PBX V8.0 based TAPI Service Provider&#039;&#039; (TSP) is an enhanced version of the [[ Reference7:Unified Win32 and x64 TAPI Service Provider | previous TSP version ]] that takes advantage of the [[ Reference8:SOAP API | new SOAP features ]] provided with version 8 PBX firmware. It implements - like the previous versions - TAPI Version 3.0 without MSP (Media Service Provider).&lt;br /&gt;
&lt;br /&gt;
The [[Reference7:Unified Win32 and x64 TAPI Service Provider| previous TSP ]] still must be used for V7 PBX systems. &lt;br /&gt;
&lt;br /&gt;
This article describes how to install and use it as well how to configure the PBX in order for the TSP to work properly.&lt;br /&gt;
&lt;br /&gt;
==Applies To==&lt;br /&gt;
This information applies to&lt;br /&gt;
* innovaphone PBX V8.0 based TAPI Service Provider, Build 8001 and later&lt;br /&gt;
* innovaphone PBX V8 and later (that is, this Service Provider runs with PBX Firmware V8 and later)&lt;br /&gt;
&lt;br /&gt;
==More Information==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Enhancements ===&lt;br /&gt;
; Support for V8 firmware [[Reference8:Administration/PBX/Objects#Devices | devices]] : Each user object device is represented as a TAPI line (all sharing an identical address, the objects extension a.k.a. &#039;&#039;Number&#039;&#039; property).  This now allows to select individual registration devices when multiple devices are registered with the same PBX.  Please note that in V8, [[ Reference8:Administration/PBX/Objects/Edit_Forks | mobility devices ]] are not shown and thus not represented by  TAPI line device.  This was introduced in V9 only.&lt;br /&gt;
; Support for presence based lines :  These are TAPI lines shown which reflect the users presence state.  Presence state &#039;&#039;open&#039;&#039; is mapped to a TAPI device status &#039;&#039;in service&#039;&#039;.  Presence activity &#039;&#039;on-the-phone&#039;&#039; is mapped to a virtual call in state &#039;&#039;connected&#039;&#039;.&lt;br /&gt;
: &#039;&#039;&#039;NB&#039;&#039;&#039;: V8 PBX Firmware did set presence activity &#039;&#039;on-the-phone&#039;&#039; for each user object having a call.  Unfortunately, as this does create performance issues, this behaviour has been removed from V9 PBX Firmware.  The &#039;&#039;presence line&#039;&#039; feature may be useless with V9 PBX when the application did rely on this particular V8 PBX behaviour.&lt;br /&gt;
&lt;br /&gt;
===System Requirements===&lt;br /&gt;
The TSP will install on any Windows 32bit and x64 platform down to Windows XP/Server 2003.  For older systems, you must use a deprecated [[Reference7:TAPI_Service_Provider | previous TSP version]].  For systems running PBX firmware version 6 or earlier, you must use the even older [[Reference:TAPI_Service_Provider | version 5 based TSP]].  Note that there is no x64 version of the version 5 TSP!&lt;br /&gt;
&lt;br /&gt;
The TSP needs to maintain parallel connections to each individual PBX in the system.  For larger systems (i.e. systems with a huge number of PBXs), this may create substantial load to the underlying windows machine.  The number of parallel activities scheduled by the TSP is thus limited as a function of the available main memory and number of processors.  In particular, a maximum of 20 activities per available processor is allowed (up to build 8088, the limit is 60/processor for later builds).  If this limit is exceeded, the TSP will issue performance warnings of class WARNINGS in the TSP log file and system TAPI performance will be poor.  Use a more capable machine then.&lt;br /&gt;
&lt;br /&gt;
Microsoft Windows operating system version for desktop clients (as opposed to server systems) limit the number and performance of TCP/IP connections.  This may lead to bad performance or occasional request failures.  We generally recommend to use server operating systems for 3rd party TAPI installations thus.&lt;br /&gt;
&lt;br /&gt;
No special PBX licenses are required to use the innovaphone TSP.&lt;br /&gt;
&lt;br /&gt;
=== Download === &lt;br /&gt;
The TSP will be available on the tab &#039;&#039;Software&#039;&#039; in the [https://store.innovaphone.com/ Store].&lt;br /&gt;
&lt;br /&gt;
===Installation===&lt;br /&gt;
Windows cannot run a Win32 TSP on an x64 platform (although it can run Win32 applications on such platforms).  This is why there are 2 versions of the setup, the x64 installer (&amp;lt;code&amp;gt;setup64-release.msi&amp;lt;/code&amp;gt;) and the Win32 installer (&amp;lt;code&amp;gt;setup32-release.msi&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;release&#039;&#039; setup packages provided will install the retail version.  This is recommended for production purposes but provides no debug options whatsoever.  To track down possible problems, support may instruct you to install the debug version.  &lt;br /&gt;
&lt;br /&gt;
The TSP may be installed on each machine where a desired TAPI based&lt;br /&gt;
application is to be run.  If for example, Outlook is to be used, then&lt;br /&gt;
each client PC running Outlook may have the TSP installed.  Although&lt;br /&gt;
this is typical for a 1st party configuration, all clients may have full&lt;br /&gt;
3rd party functionality, that is, they may control all existing lines.&lt;br /&gt;
&lt;br /&gt;
As an alternative, the TSP can be installed on a single machine and a&lt;br /&gt;
3rd party TAPI server product (such as the IXI-Call Server available as&lt;br /&gt;
a separate product) may be used to provide the network clients with a&lt;br /&gt;
TAPI interface.  Also, Microsoft’s Remote TAPI Server should work but is not being tested, so you use it on your own risk.&lt;br /&gt;
&lt;br /&gt;
To install, &lt;br /&gt;
* select and download the &amp;lt;code&amp;gt;setup32-release.msi&amp;lt;/code&amp;gt; install packages on 32bit platforms or the &amp;lt;code&amp;gt;setup64-release.msi&amp;lt;/code&amp;gt; install package on 64bit platforms.&lt;br /&gt;
* double-click the install package to launch the installer&lt;br /&gt;
[[Image:Unified Win32 and x64 TAPI Service Provider - zipcontent.png]]&lt;br /&gt;
* accept the license agreement&lt;br /&gt;
* select the target folder&lt;br /&gt;
* complete the installer&lt;br /&gt;
&lt;br /&gt;
When the installer has copied all files to the target machine, you need to add the TSP to the machine&#039;s TAPI system&lt;br /&gt;
* open the &#039;&#039;Telephone and Modem&#039;&#039; control panel&lt;br /&gt;
* Switch to the rightmost tab (&#039;&#039;Extras&#039;&#039;)&lt;br /&gt;
* Click on the &#039;&#039;Add...&#039;&#039; button&lt;br /&gt;
[[Image:Unified Win32 and x64 TAPI Service Provider - Control Panel Add.png]]&lt;br /&gt;
* Select the innovaphone TAPI provider driver&lt;br /&gt;
* Fill out the configuration dialogue&lt;br /&gt;
* Install the provider by clicking &#039;&#039;OK&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== File Organization ====&lt;br /&gt;
Windows forces all TAPI service provider files to reside in Windows&#039; &#039;&#039;System Folder&#039;&#039;.  This is the &amp;lt;code&amp;gt;system32&amp;lt;/code&amp;gt; folder in your windows install directory (usually &amp;lt;code&amp;gt;C:\windows\system32&amp;lt;/code&amp;gt;), even if you are running an x64 platform!  The installer will thus copy these files (&amp;lt;code&amp;gt;tsp8.tsp&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;tsp8UI.dll&amp;lt;/code&amp;gt;) in to this directory.  All other files however will be copied to the &amp;lt;code&amp;gt;innovaphone AG\innovaphone® PBX V8 TAPI Service Provider&amp;lt;/code&amp;gt; folder underneath your systems &#039;&#039;Program Files Folder&#039;&#039;.  &lt;br /&gt;
&lt;br /&gt;
The subdirectories &amp;lt;code&amp;gt;Debug&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;Logs&amp;lt;/code&amp;gt; are created.  &amp;lt;code&amp;gt;Debug&amp;lt;/code&amp;gt; contains the driver&#039;s debug version, &amp;lt;code&amp;gt;Logs&amp;lt;/code&amp;gt; will receive the log files when a debug version is used.&lt;br /&gt;
&lt;br /&gt;
On x64 platform systems, the Win32 version of the configuration DLL (&amp;lt;code&amp;gt;tsp8UI.dll&amp;lt;/code&amp;gt;) will be installed to the windows &#039;&#039;Windows on Windows64 System Folder&#039;&#039; (&amp;lt;code&amp;gt;SysWOW64&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
====Upgrading to a newer Version====&lt;br /&gt;
When you attempt to upgrade the TSP from a previous version, the Windows&lt;br /&gt;
installer will first remove any previous installation.  When the new&lt;br /&gt;
software is installed then, the TSP will be installed again into the&lt;br /&gt;
TAPI system.  &lt;br /&gt;
&lt;br /&gt;
There is no need to remove the driver from the &#039;&#039;Telephone and Modem Control Panel&#039;&#039;, as this would make you loose your driver configuration.&lt;br /&gt;
&lt;br /&gt;
====Upgrading from the old Win32-only Version====&lt;br /&gt;
If you upgrade from the older Win32-only versions of the TSP (soap-appl/tapi/7.00 or soap-appl/tapi/5.00), you must first remove the old TSP from &#039;&#039;telephone and modem&#039;&#039; control panel and uninstall the old product from the &#039;&#039;Software&#039;&#039; (or &#039;&#039;Programs and Functions&#039;&#039;) control panel.&lt;br /&gt;
&lt;br /&gt;
When you upgrade from the old V7 64-bit TSP (soap-appl/tapi/7.00-64), you should first update this older version to the latest build available.&lt;br /&gt;
&lt;br /&gt;
This procedure ensures that during the upgrade your TAPI lines retain their internal identifiers and thus their meaning in your TAPI application&#039;s configuration.&lt;br /&gt;
&lt;br /&gt;
==== Uninstalling the TSP ====&lt;br /&gt;
To uninstall the TSP proceed as follows&lt;br /&gt;
* Remove the TAPI driver from the TAPI system using &#039;&#039;Telephony and Modem Control Panel&#039;&#039;&lt;br /&gt;
* close &#039;&#039;Telephony and Modem Control Panel&#039;&#039;&lt;br /&gt;
* shut down windows telephony service. This can be done from the Windows &#039;&#039;Service Control Panel&#039;&#039; or by invoking &amp;lt;code&amp;gt;net stop tapisrv&amp;lt;/code&amp;gt; from a command prompt&lt;br /&gt;
* remove the installation using windows &#039;&#039;Programs Control Panel&#039;&#039; or by invoking the original .msi again&lt;br /&gt;
&lt;br /&gt;
You will notice that Windows may fail to remove the driver files from the &#039;&#039;Windows System Directory&#039;&#039;.  To clean up remove &amp;lt;code&amp;gt;tsp8.tsp&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;tsp8UI.dll&amp;lt;/code&amp;gt; from the &amp;lt;code&amp;gt;system32&amp;lt;/code&amp;gt; folder as well as - on x64 systems - from the &amp;lt;code&amp;gt;SysWOW64&amp;lt;/code&amp;gt; folder.&lt;br /&gt;
&lt;br /&gt;
Also, if you did file tracing, any remaining debug files in the &amp;lt;code&amp;gt;Logs&amp;lt;/code&amp;gt; folder are left over and need to be removed manually.&lt;br /&gt;
&lt;br /&gt;
The TSP will create some entries in the windows registry which will not be removed on uninstall.  It is recommended to leave these entries as is.  Only if you are sure you will never install the TSP again on this system or you are sure you will never use it with the PBX installation you used so far, you may want to delete them from the registry.&lt;br /&gt;
&lt;br /&gt;
==== Rolling out First Party TSPs to multiple PCs ====&lt;br /&gt;
Normally, when multiple users require CTI and hence TAPI functionality, the best way is to use a server based, multi-client 3rd party CTI application.  This will share all functions among all client PCs.  If this is not an option, e.g. because the TAPI application in use does not support it, you may want to consider using Microsoft&#039;s TAPI Server and remote TSP.  See Microsoft&#039;s [http://technet.microsoft.com/en-us/library/cc786297%28v=ws.10%29.aspx Telephony service providers overview] and [http://technet.microsoft.com/en-us/library/cc770373.aspx Manage Telephony Servers] documents.  &lt;br /&gt;
&lt;br /&gt;
If you still want to use the native innovaphone TSP on a number of PCs (instead of once on a server), you can roll out the TSP using some of the [http://support.microsoft.com/kb/816102/EN-US software deployment schemes Microsoft Server provide].  In such a case, you will likely want to deploy identical configurations to all these PCs. While this theoretically can be done by distributing registry settings, there will be a problem with the PBX access credentials.  These are stored in encrypted format in the registry and can only be decrypted on the PC on which they have been set.  That is, deploying such registry settings to other PCs will result in a non-functional setup.&lt;br /&gt;
&lt;br /&gt;
To work around this problem, you may store the credentials in clear text in the registry.  To do so, you would put the &#039;&#039;Password&#039;&#039; in a REG_SZ value named &amp;lt;code&amp;gt;admin1-free&amp;lt;/code&amp;gt; and the &#039;&#039;Account&#039;&#039; into a REG_SZ value named &amp;lt;code&amp;gt;admin2-free&amp;lt;/code&amp;gt;.  If such a value is found in the proper place in the registry, the values configured using the telephony control panel are ignored.  &lt;br /&gt;
&lt;br /&gt;
[[Image:TAPI Service Provider-tsp8-nocrypt.png]]&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;Keep in mind that having credentials in clear in the registry presents a security risk!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This feature is available in build 8079 and later.&lt;br /&gt;
&lt;br /&gt;
=== Upgrade from Build 8164 or earlier ===&lt;br /&gt;
From build 8165, the TAPI configuration has been moved to a different registry location.  This has been done because latest windows versions (namely, Windows 10) do not allow the TSP to access registry information in the location used so far (&amp;lt;code&amp;gt;HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\innovaphone® PBX V8 TAPI Service Provider&amp;lt;/code&amp;gt;).   To work around this issue, it is now stored in &amp;lt;code&amp;gt;HKEY_LOCAL_MACHINE\SOFTWARE\innovaphone\innovaphone® PBX V8 TAPI Service Provider&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The TSP configuration dialogue however runs with user privileges (as opposed to the TSP which runs with limited service privileges). It can therefore read the old configuration information and copy it to the new location.  From build 8165, the configuration dialogue will thus copy any old configuration information to the new location when it is opened.  When you upgrade an existing installation and open the configuration dialogue, you will see no change.  However, when the configuration is saved, it is then present in the new location.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;To upgrade an installation from build 8164 or earlier (that is TAPI &#039;V8 TAPI Service Provider (32 and 64bit) - hotfix14&#039;&#039; available in the &#039;&#039;V8 applications hotfix20&#039;&#039; package or earlier), proceed as follows:&#039;&#039;&#039;&lt;br /&gt;
* stop the telephony service (e.g. &amp;lt;code&amp;gt;net stop tapisrv&amp;lt;/code&amp;gt;)&lt;br /&gt;
* install the new TSP&lt;br /&gt;
* open the TSP configuration dialogue&lt;br /&gt;
* verify the configuration data&lt;br /&gt;
* save the configuration&lt;br /&gt;
* (re) start your TAPI application&lt;br /&gt;
&lt;br /&gt;
If you fail to migrate the configuration as described, the TSP will start, but not work!&lt;br /&gt;
&lt;br /&gt;
===Configuration===&lt;br /&gt;
The TSP configuration dialogue looks like this:&lt;br /&gt;
&lt;br /&gt;
[[Image:Unified Win32 and x64 TAPI Service Provider - Config UI.png]]&lt;br /&gt;
&lt;br /&gt;
* The &#039;&#039;VERIFY&#039;&#039; button will verify the configuration.  Note that the &#039;&#039;Username&#039;&#039; drop down list will only be populated after a successful verify. &lt;br /&gt;
* The &#039;&#039;OK&#039;&#039; button will save the configuration.&lt;br /&gt;
* The &#039;&#039;CANCEL&#039;&#039; button will quit the configuration without saving any changes.  If it is the initial configuration while you add the TSP via the telephone and modem control panel, the TSP will not be added &lt;br /&gt;
&lt;br /&gt;
TAPI talks to the PBX using [[Reference7:SOAP_API | SOAP ]] which in turn uses HTTP for communication.  Both secure (https) and non-secure (http) communication is supported.  In any case, HTTP basic authentication is used.  &lt;br /&gt;
To be able to connect to the PBX, the TSP needs to know proper credentials to use during HTTP authentication. These are referred to as &#039;&#039;PBX Account&#039;&#039; and &#039;&#039;PBX Password&#039;&#039;.  Also, a suitable &#039;&#039;TAPI User&#039;&#039; must be selected.&lt;br /&gt;
&lt;br /&gt;
==== Controlling the Line Devices handled by TAPI ====&lt;br /&gt;
&lt;br /&gt;
TAPI connects to your PBX as a PBX user referred to as &#039;&#039;TAPI User&#039;&#039;.  It will see all PBX objects that are members of groups in which the &#039;&#039;TAPI User&#039;&#039; is an active member.  If the &#039;&#039;TAPI User&#039;&#039; is not an active member in any group, TAPI will see the &#039;&#039;TAPI User&#039;&#039; object only. This may be useful in a [http://en.wikipedia.org/wiki/Telephony_Application_Programming_Interface 1st party TAPI scenario].  PBX objects are represented as TAPI lines.  &lt;br /&gt;
&lt;br /&gt;
The PBX object you use as &#039;&#039;TAPI User&#039;&#039; needs to have at least &#039;&#039;Viewing only&#039;&#039; [[Reference:Administration/PBX/Objects/Edit Rights | PBX user rights]].  Its &#039;&#039;Long Name&#039;&#039; property is used as &#039;&#039;TAPI User Username&#039;&#039;, its &#039;&#039;Name&#039;&#039; property as &#039;&#039;PBX Account&#039;&#039; and the password as &#039;&#039;PBX Password&#039;&#039;.  This is why the PBX object used as &#039;&#039;TAPI User&#039;&#039; must have a password configured. &lt;br /&gt;
&lt;br /&gt;
===== 1st Party Configuration =====&lt;br /&gt;
In a 1st party scenario, the TSP will only work on a single PBX object.  This will typically be a user&#039;s phone and thus the user itself will be used as the &#039;&#039;TAPI User&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
[[Image:Unified Win32 and x64 TAPI Service Provider - FirstParty.png ]]&lt;br /&gt;
&lt;br /&gt;
In such a configuration the TSP is typically installed on the users PC and the CTI software is accessing TAPI directly (such as e.g. Microsoft Outlook does).   &lt;br /&gt;
&lt;br /&gt;
The TSP configuration dialogue will check for the number of lines seen.  If it is only one, then it will issue a warning message:&lt;br /&gt;
&lt;br /&gt;
[[Image:Unified Win32 and x64 TAPI Service Provider - OnlyOne.png]]&lt;br /&gt;
&lt;br /&gt;
This is because 3rd party configurations are much more common and this situation often indicates a configuration problem.  In a first party configuration, you can safely ignore this message. &lt;br /&gt;
&lt;br /&gt;
===== 3rd Party Configuration =====&lt;br /&gt;
In a 3rd party configuration, the TSP will work with multiple PBX objects.  &lt;br /&gt;
&lt;br /&gt;
[[Image:Unified Win32 and x64 TAPI Service Provider - ThirdParty.png]]&lt;br /&gt;
&lt;br /&gt;
Typically, you will share a single TSP instance on a server system for use by several users on their desktop PCs.  This is done by virtue of a &#039;&#039;TAPI Server&#039;&#039;.  There are various TAPI server products available on the market, including but not limit to the Estos ProCall product and the remote TAPI server included in Microsoft Windows server operating systems.  &lt;br /&gt;
&lt;br /&gt;
In this scenario, it is recommended to create a pseudo PBX user object for use as the &#039;&#039;TAPI User&#039;&#039;.  This pseudo user is often called &amp;lt;code&amp;gt;_TAPI_&amp;lt;/code&amp;gt;.  You would create a dedicated group to control the list of PBX objects the TSP creates a line device for.  This group is often called &amp;lt;code&amp;gt;tapi&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Selective Call Forwards ====&lt;br /&gt;
Many CTI applications support distinct call forwards for internal and/or external calls.  The TSP will translate such requests to a call forward on the PBX which has the [[Reference7:Administration/PBX/Objects/Edit_CFs | &#039;&#039;Only&#039;&#039; or &#039;&#039;Only not&#039;&#039; property]] set to the number of the trunk line.  For this to work, it needs to know this number.  To know the number, the trunk line PBX object must be seen by the TSP (see above).  If this is not the case, the TSP configuration dialogue will issue a warning:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Unified Win32 and x64 TAPI Service Provider - NoTrunk.png]]&lt;br /&gt;
&lt;br /&gt;
In a vanilla first party scenario, this is obviously not the case.  If you don&#039;t care, you can safely ignore this issue.  Attempts to set such call forward will be rejected then as &#039;&#039;operation unavailable&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
In a Master/Slave PBX scenario where there is no Trunk Line object on the Master PBX, but only on the Slave PBXs, a workaround is required to suppress the warning and enable selective call forwarding on the Slave PBXs. In this case, create a dummy &amp;quot;Trunk Line&amp;quot; object on the Master PBX with the same extension number used by the &amp;quot;Trunk Line&amp;quot; objects on the Slave PBXs (usually 0).&lt;br /&gt;
&lt;br /&gt;
==== Multi Site Configuration ====&lt;br /&gt;
In a system with multiple PBXs, the TSP needs to connect to each of the individual PBXs.  &lt;br /&gt;
&lt;br /&gt;
[[Image:Unified Win32 and x64 TAPI Service Provider - MultiSite.png]]&lt;br /&gt;
&lt;br /&gt;
In this case, you would specify your master PBX as &#039;&#039;PBX Master&#039;&#039;.  There is no need to configure the complete PBX tree to the TSP as it is determined dynamically on runtime by analysing the PBX/Node objects in the master PBX and their registration status.  If a registered PBX is found, this PBX is added to the list of active PBXs and a new connection is established.  The PBX tree is built and maintained dynamically.  A reconfiguration or restart of the TSP is not required on changes thus.&lt;br /&gt;
For this to work&lt;br /&gt;
&lt;br /&gt;
* the PBX object used as &#039;&#039;TAPI User&#039;&#039; must exist in each PBX with same properties (including name and the password). You may want to use &amp;lt;code&amp;gt;_TAPI_&amp;lt;/code&amp;gt; as &#039;&#039;Name&#039;&#039;/&#039;&#039;Long Name&#039;&#039;.  This object must be &#039;&#039;active&#039;&#039; member in a group (which you may want to call &amp;lt;code&amp;gt;tapi&amp;lt;/code&amp;gt;).  A password must be set.  The object must have at least &#039;&#039;Viewing only&#039;&#039; rights&lt;br /&gt;
* the slave PBX-objects (or in older firmware versions the slave PBX Node-objects)  must be visible to the TSP (that is, must be non-active member of the group the &#039;&#039;TAPI User&#039;&#039; object is an active member of, e.g. &amp;lt;code&amp;gt;tapi&amp;lt;/code&amp;gt;) so that the slaves are made known to the TSP.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In a replicated scenario, you would create a &#039;&#039;TAPI user&#039;&#039; as recommended above and [[Reference8:Administration/PBX/Objects#Objects_with_empty_node_or_PBX | leave the &#039;&#039;PBX&#039;&#039; and &#039;&#039;Node&#039;&#039; properties empty ]].  This user should then be used as both &#039;&#039;PBX Account&#039;&#039; and &#039;&#039;TAPI User Username&#039;&#039; in the TAPI configuration dialog.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Further relevant settings&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
You can disable slave detection by checking &#039;&#039;Do not monitor slaves&#039;&#039; property in the TSP configuration dialogue. &lt;br /&gt;
&lt;br /&gt;
TAPI maintains an &#039;&#039;address&#039;&#039; property per line device.  This usually is the lines extension.  In a multi site configuration, the address property will be set to the &#039;&#039;Number&#039;&#039; property of the node the respective PBX object is configured in, plus the &#039;&#039;Number&#039;&#039; property of the object itself.  So if an object has &#039;&#039;Number&#039;&#039; &amp;lt;code&amp;gt;42&amp;lt;/code&amp;gt; and lives in node &amp;lt;code&amp;gt;801&amp;lt;/code&amp;gt;, then its correspondence line device will have address &amp;lt;code&amp;gt;80142&amp;lt;/code&amp;gt;.  By checking the &#039;&#039;Use pure node extensions&#039;&#039; property in the TSP configuration dialogue, you change the algorithm so that only the objects own &#039;&#039;Number&#039;&#039; is used (&amp;lt;code&amp;gt;42&amp;lt;/code&amp;gt; in our example).&lt;br /&gt;
&lt;br /&gt;
==== Standby Configurations ====&lt;br /&gt;
In a system with standby PBX for the master PBX, you need to specify the &#039;&#039;PBX Standby&#039;&#039; IP address.  This will be connected if the master is unavailable.  Note that there is no need to explicitly configure slave-standby PBXs.&lt;br /&gt;
&lt;br /&gt;
==== Working with multiple, unrelated PBXs ====&lt;br /&gt;
When working with multiple, unrelated PBXs (that is, PBXs that do &#039;&#039;not&#039;&#039; form a PBX tree as slaves and masters do), the TSP cannot derive the list of PBXs to track from the registration status.  To support such a configuration, you will need to configure the extraneous master PBXs manually using regedit.  Please note that using regedit may harm your system and may even cause inability to boot!&lt;br /&gt;
&lt;br /&gt;
To find and edit the right registry entries, proceed as follows:&lt;br /&gt;
&lt;br /&gt;
* open the key &amp;lt;code&amp;gt;HKEY_LOCAL_MACHINE\SOFTWARE\innovaphone\innovaphone® PBX V8 TAPI Service Provider&amp;lt;/code&amp;gt;&amp;lt;ref name=&amp;quot;regkey&amp;quot;/&amp;gt;&lt;br /&gt;
* open its subkey &amp;lt;code&amp;gt;Device&amp;lt;/code&amp;gt;&#039;&#039;n&#039;&#039; where &#039;&#039;n&#039;&#039; is the provider id of the installed innovaphone TSP (for builds before 8164 only)&lt;br /&gt;
* Open the &amp;lt;code&amp;gt;FQDN&amp;lt;/code&amp;gt; key and add all extra PBXs&lt;br /&gt;
* For those PBXs that have a standby PBX, add a value to the &amp;lt;code&amp;gt;StandbyFQDN&amp;lt;/code&amp;gt; key (please note: these are parallel lists.  So master and standby need to have the same respective index in the &amp;lt;code&amp;gt;FQDN&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;StandbyFQDN&amp;lt;/code&amp;gt; value lists)&lt;br /&gt;
&lt;br /&gt;
The standard configuration UI will not show these extra values.  However, it will also not touch them.  So even if you use the standard UI to edit, only the first value in the lists will be changed and the remainder left unchanged. You can thus safely use the standard UI to edit all other values.   As with multi site configurations, all PBXs need to be accessible using the same &#039;&#039;TAPI User&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Please note that this method is deprecated and will likely be removed from future versions of the TSP.  &lt;br /&gt;
&lt;br /&gt;
==== Setting the Line Device Name ====&lt;br /&gt;
The TSP will derive the line device&#039;s name from the properties of the respective PBX object.  By default the name will be the objects &#039;&#039;Long Name&#039;&#039; followed by the name of the PBX the user ought to register with in parentheses.  So if the users &#039;&#039;Long Name&#039;&#039; is &amp;lt;code&amp;gt;Foo Bar&amp;lt;/code&amp;gt; and the registration PBX is &amp;lt;code&amp;gt;branch1&amp;lt;/code&amp;gt;, the line device will be called &amp;lt;code&amp;gt;Foo Bar [branch1]&amp;lt;/code&amp;gt;.  You can specify a different pattern by changing the &#039;&#039;TAPI Line Names&#039;&#039; property of the TSP configuration dialogue.  The following replacement characters are available:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|+&lt;br /&gt;
| Meta || Replacement&lt;br /&gt;
|+&lt;br /&gt;
| %c || The objects &#039;&#039;Long Name&#039;&#039; (cn)&lt;br /&gt;
|+&lt;br /&gt;
| %C || The objects &#039;&#039;Long Name&#039;&#039; (cn) followed by the &#039;&#039;Name&#039;&#039; of the &#039;&#039;Device&#039;&#039; the line represents in braces &amp;lt;code&amp;gt;[name]&amp;lt;/code&amp;gt; if it differs from the &#039;&#039;Long Name&#039;&#039;&lt;br /&gt;
|+&lt;br /&gt;
| %d || The objects &#039;&#039;Display Name&#039;&#039; (dn)&lt;br /&gt;
|+&lt;br /&gt;
| %D || The objects &#039;&#039;Display Name&#039;&#039; (dn) followed by the &#039;&#039;Name&#039;&#039; of the &#039;&#039;Device&#039;&#039; the line represents in braces &amp;lt;code&amp;gt;[name]&amp;lt;/code&amp;gt; if it differs from the &#039;&#039;Display Name&#039;&#039;&lt;br /&gt;
|+&lt;br /&gt;
| %h || The objects &#039;&#039;Name&#039;&#039; (h323 alias)&lt;br /&gt;
|+&lt;br /&gt;
| %H || The objects &#039;&#039;Name&#039;&#039; (h323 alias) followed by the &#039;&#039;Name&#039;&#039; of the &#039;&#039;Device&#039;&#039; the line represents in braces &amp;lt;code&amp;gt;[name]&amp;lt;/code&amp;gt; if it differs from the &#039;&#039;Name&#039;&#039;&lt;br /&gt;
|+&lt;br /&gt;
| %t || The &#039;&#039;Name&#039;&#039; of the &#039;&#039;Device&#039;&#039; the line represents&lt;br /&gt;
|+&lt;br /&gt;
| %T || The &#039;&#039;Hardware Id&#039;&#039; of the &#039;&#039;Device&#039;&#039; the line represents (from build 8181)&lt;br /&gt;
|+&lt;br /&gt;
| %e || The objects extension (e164)&lt;br /&gt;
|+&lt;br /&gt;
| %E || The objects extension (e164) prefixed with the objects node number&lt;br /&gt;
|+&lt;br /&gt;
| %N || The line address as reported to TAPI&lt;br /&gt;
|+&lt;br /&gt;
| %n || host name (of master pbx)&lt;br /&gt;
|+&lt;br /&gt;
| %p || &#039;&#039;&#039;:&#039;&#039;&#039;&#039;&#039;port-number&#039;&#039; (of master pbx&#039;s http access, empty if 80)&lt;br /&gt;
|+&lt;br /&gt;
| %P || raw port number of master pbx&lt;br /&gt;
|+&lt;br /&gt;
| %u || url-like user name (&#039;&#039;&#039;&#039;&#039;user&#039;&#039;@&#039;&#039;host&#039;&#039;&#039;&#039;&#039;)&lt;br /&gt;
|+&lt;br /&gt;
| %U || user url as per draft-levin-iptel-h323-url-scheme-04 (&#039;&#039;&#039;h323:://&#039;&#039;user&#039;&#039;@&#039;&#039;host&#039;&#039;:&#039;&#039;port&#039;&#039;&#039;&#039;&#039;)&lt;br /&gt;
|+&lt;br /&gt;
| %X || the PBX name the user is registered with (note that using this pattern may result in a change of the name when a standby situation occurs)&lt;br /&gt;
|+&lt;br /&gt;
| %x || the PBX name the user is reported by (note that using this pattern may result in a change of the name when the users &#039;&#039;PBX&#039;&#039; attribute changes)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The default pattern is &amp;lt;code&amp;gt;%C (%x)&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- rufumleitung, extern, intern, amtsleitung, vom amt, zum amt --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Miscellaneous Flags ====&lt;br /&gt;
; Show full E164 Numbers : when set, the TSP will announce the full calling number from the root when indicated by the PBX in the TAPI &#039;&#039;calling party name&#039;&#039; attribute.  The number will be appended to the calling name with a &amp;lt;code&amp;gt;@&amp;lt;/code&amp;gt;.&lt;br /&gt;
; Do not show parked Calls : will hide parked calls from the TAPI application (as some get confused and don&#039;t know how to handle them)&lt;br /&gt;
; Map PBX Devices to Lines : if set, the TSP will create one TAPI line for each individual [[Reference9:PBX/Objects#Devices|PBX device]] configured in a user object.  See [[#Enhancements]] above.  If you do not set this flag, see [[Support:How should TAPI line device be registered?]]&lt;br /&gt;
; Map Presence Status to TAPI Lines : if set, the TSP will create one extra TAPI line for each PBX device object.  See [[#Enhancements]] above.&lt;br /&gt;
; No special Disconnect Behaviour : normally, lines monitored by TAPI will behave slightly different when a call is terminated.  With no TAPI on the line, the call will be disconnected immediately (from a PBX point of view).  In cases where the phone would play some tones after termination of the call (e.g. a busy tone when the call has never been connected to the far end), this state is simulated by the phone and not visible to TAPI.  Therefore, it is not possible to use TAPI functions on this call any more (as it in reality does not exist any more).  When this flag is set, monitored lines will not be treated specially.  Available from hotfix 6. To prevent the IP-Phone to play any tones after the call is disconnected, the phone preferences option &#039;&#039;&#039;Go onhook if final call is released by remote side even if handset is lifted&#039;&#039;&#039; can be activated. This is the feature of the IP-Phone is useful in a e.g. call center at agent phones and can be configured here [[Reference11r1:Phone/Preferences]].&lt;br /&gt;
: To prevent an innovaphone IP-Phone from playing any tones after a call is disconnected, the phone preferences option &#039;&#039;&#039;Go onhook if final call is released by remote side even if handset is lifted&#039;&#039;&#039; can be activated. This feature is useful for agent phones in a call center for example and can be configured in [[Reference11r1:Phone/Preferences]]&lt;br /&gt;
&lt;br /&gt;
===Trouble Shooting===&lt;br /&gt;
The TSP will (from build 8095) write messages of type INFO (&#039;&#039;informational messages&#039;&#039;) or WARNING (&#039;&#039;Warnings/Errors&#039;&#039;) to the windows event log. Such events are always logged to the application log and event source is the provider name (&#039;&#039;innovaphone® PBX V8 TAPI Service Provider&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
==== Turning on Debugging ====&lt;br /&gt;
There are 2 versions of the TSP, debug and retail, which are both copied to the machine during setup.  The retail version is installed into the system directories, whereas the debug version is stored in a separate directory.  This is available through a short cut in the Start menu.&lt;br /&gt;
&lt;br /&gt;
The TSP can produce a number of debugging messages which can be helpful to debug issues (in both &#039;&#039;retail&#039;&#039; and &#039;&#039;debug&#039;&#039; builds).  By default, debug messages are written to the systems debug buffer mechanism (using OutputDebugString()).  Such messages can be examined using standard debugging tools, such as for example &amp;lt;code&amp;gt;dbgview&amp;lt;/code&amp;gt; which is [http://technet.microsoft.com/en-us/sysinternals/bb896647.aspx available from Microsoft]. &lt;br /&gt;
&lt;br /&gt;
Debug messages have a class associated with it and the amount of messages written can be controlled by enabling or disabling specific classes.  This is done by setting a bitmask in the registry value &amp;lt;code&amp;gt;TraceLevel&amp;lt;/code&amp;gt; in the &amp;lt;code&amp;gt;HKEY_LOCAL_MACHINE\SOFTWARE\innovaphone\innovaphone® PBX V8 TAPI Service Provider&amp;lt;/code&amp;gt;&amp;lt;ref name=&amp;quot;regkey&amp;quot;/&amp;gt; key. &lt;br /&gt;
&lt;br /&gt;
The easiest way to set the TSP&#039;s debug level is with the &#039;&#039;TSP Control&#039;&#039; utility (&#039;&#039;tsptray.exe&#039;&#039;) which is installed with the TSP.&lt;br /&gt;
&lt;br /&gt;
The available classes include&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| Bit in &amp;lt;code&amp;gt;TraceLevel&amp;lt;/code&amp;gt; || Class &lt;br /&gt;
|-&lt;br /&gt;
| 0x00000001 || Minimum tracing &lt;br /&gt;
|-&lt;br /&gt;
| 0x00000002 || TAPI api traces &lt;br /&gt;
|-&lt;br /&gt;
| 0x00000020 || Basic telephony object creation/destruction  &lt;br /&gt;
|-&lt;br /&gt;
| 0x00000040 || Thread creation/destruction &lt;br /&gt;
|-&lt;br /&gt;
| 0x00000080 || Request creation/destruction &lt;br /&gt;
|-&lt;br /&gt;
| 0x00000100 || call related messages &lt;br /&gt;
|-&lt;br /&gt;
| 0x00000200 || Call id map &lt;br /&gt;
|-&lt;br /&gt;
| 0x00000400 || Warnings/Errors &lt;br /&gt;
|-&lt;br /&gt;
| 0x00000800 || Worker thread execution &lt;br /&gt;
|-&lt;br /&gt;
| 0x00001000 || Full lock/unlock notifications &lt;br /&gt;
|-&lt;br /&gt;
| 0x00002000 || Win32 Critical section create/destroy &lt;br /&gt;
|-&lt;br /&gt;
| 0x00004000 || Agent proxy support &lt;br /&gt;
|-&lt;br /&gt;
| 0x00008000 || constructor/destructor debug &lt;br /&gt;
|-&lt;br /&gt;
| 0x00010000 || development debugs &lt;br /&gt;
|-&lt;br /&gt;
| 0x00100000 || verbose debugging  &lt;br /&gt;
|-&lt;br /&gt;
| 0x00200000 || SOAP trace &lt;br /&gt;
|-&lt;br /&gt;
| 0x00400000 || SOAP message dumps &lt;br /&gt;
|-&lt;br /&gt;
| 0x01000000 || ATL debug &lt;br /&gt;
|-&lt;br /&gt;
| 0x02000000 || line related messages &lt;br /&gt;
|-&lt;br /&gt;
| 0x04000000 || informational messages &lt;br /&gt;
|-&lt;br /&gt;
| 0x10000000 || dump call infos &lt;br /&gt;
|-&lt;br /&gt;
| 0x20000000 || dump PBX infos &lt;br /&gt;
|-&lt;br /&gt;
| 0x80000000 || output log messages to file &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;code&amp;gt;TraceLevel&amp;lt;/code&amp;gt; is not set, it defaults to (hex) &amp;lt;code&amp;gt;04000400&amp;lt;/code&amp;gt; in retail builds and to (hex) FFFFFFFF in debug builds.  A nice value to use is (hex) &amp;lt;code&amp;gt;92200580&amp;lt;/code&amp;gt;.  The &amp;lt;code&amp;gt;TraceLevel&amp;lt;/code&amp;gt; can be changed during runtime of the provider (it may take up to 10 seconds though for the setting to take effect).  In normal scenarios there is no need to install the debug version.&lt;br /&gt;
&lt;br /&gt;
Both &#039;&#039;informational messages&#039;&#039; and &#039;&#039;Warnings/Errors&#039;&#039; are always turned on (from build 8095).&lt;br /&gt;
&lt;br /&gt;
: A problem has been reported on Server 2008 x64 systems which may also apply to others.  On such systems, the value of &amp;lt;code&amp;gt;TraceLevel&amp;lt;/code&amp;gt; may be reset to its default every 10 seconds.  A workaround is to change the account the Telephony service is running in from its default (usually &#039;&#039;Network Service&#039;&#039;) to e.g. &#039;&#039;Local System&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===== Crash Dumps =====&lt;br /&gt;
From build 8063 the TSP will write crash dumps to the log directory (usually something like &amp;lt;code&amp;gt;C:\Program Files\innovaphone AG\innovaphone® PBX V8 TSP\Logs&amp;lt;/code&amp;gt;) in case of a trap.  In release installs, these are not very useful. For debug builds though, they include helfpul information.  Please provide these files (the can be zipped to a great extent) to support if requested. A crash dump file will be called something like &amp;lt;code&amp;gt;TSP8&amp;lt;i&amp;gt;build&amp;lt;/i&amp;gt;-&amp;lt;i&amp;gt;hour&amp;lt;/i&amp;gt;#&amp;lt;i&amp;gt;minute&amp;lt;/i&amp;gt;-&amp;lt;i&amp;gt;day&amp;lt;/i&amp;gt;.&amp;lt;i&amp;gt;month&amp;lt;/i&amp;gt;#&amp;lt;i&amp;gt;seqnr&amp;lt;/i&amp;gt;.dmp&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===== Forcing a Crash Dump =====&lt;br /&gt;
In rare cases, it may be useful to force a TAPI crash for debug reasons.  This can be done by issueing a &amp;lt;code&amp;gt;lineMakeCall&amp;lt;/code&amp;gt; with called number &amp;lt;code&amp;gt;0815&amp;lt;/code&amp;gt;, called-subaddress &amp;lt;code&amp;gt;4711&amp;lt;/code&amp;gt; and called-name &amp;lt;code&amp;gt;!crash!&amp;lt;/code&amp;gt; or simply calling &amp;lt;code&amp;gt;0815|4711^!crash!&amp;lt;/code&amp;gt; from phone.exe.&lt;br /&gt;
&lt;br /&gt;
==== Saving Log Messages to a File ====&lt;br /&gt;
The &amp;lt;code&amp;gt;0x80000000&amp;lt;/code&amp;gt; value is special, as it does not denote a message class.  Instead, it turns on log file writing, both in retail and debug versions.  For this to work, the registry value &amp;lt;code&amp;gt;DoTraceFile&amp;lt;/code&amp;gt; must be set to &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;HKEY_LOCAL_MACHINE\SOFTWARE\innovaphone\innovaphone® PBX V8 TAPI Service Provider&amp;lt;/code&amp;gt;&amp;lt;ref name=&amp;quot;regkey&amp;quot;/&amp;gt; when the TSP starts.  If this value is not present, it defaults to &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; in both retail and debug builds.  Setting it to 0 disables log file writing regardless of any other setting.  This may save some CPU cycles for installations with a real large number of lines.&lt;br /&gt;
&lt;br /&gt;
The TSP will keep 24 log files (a days worth) by default.   This value can be changed using the &amp;lt;code&amp;gt;NumLogFiles&amp;lt;/code&amp;gt; value in &amp;lt;code&amp;gt;HKEY_LOCAL_MACHINE\SOFTWARE\innovaphone\innovaphone® PBX V8 TAPI Service Provider&amp;lt;/code&amp;gt;&amp;lt;ref name=&amp;quot;regkey&amp;quot;/&amp;gt;.  Older log files will be removed.  Also, when the TSP shuts down, it by default will remove all log files it created so far.  However, any TSP will only remove log files created by itself.  This ensures that if the TSP or the system terminates prematurely, the log files will be kept even if a new instance is started and terminated later on.  Form TSP V8 hotfix 8 on, this behaviour can be tweaked by setting the DWORD registry value &amp;lt;code&amp;gt;KeepLogFiles&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;HKEY_LOCAL_MACHINE\SOFTWARE\innovaphone\innovaphone® PBX V8 TAPI Service Provider&amp;lt;/code&amp;gt;&amp;lt;ref name=&amp;quot;regkey&amp;quot;/&amp;gt;:&lt;br /&gt;
{|&lt;br /&gt;
| 0 || default || remove all log files on termination&lt;br /&gt;
|-&lt;br /&gt;
| 1 || || keep the last &#039;&#039;n&#039;&#039; log files (depending on &amp;lt;code&amp;gt;NumLogFiles&amp;lt;/code&amp;gt;) on termination&lt;br /&gt;
|-&lt;br /&gt;
| 2 || || keep all log files&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Larger systems (500 monitored lines and more) can slow down considerably when using the debug drivers.&lt;br /&gt;
&lt;br /&gt;
==== Installing the Debug Version ====&lt;br /&gt;
To install the debug version, you first install the retail version as outlined above.  You then copy the debug driver files from the &amp;lt;code&amp;gt;Debug&amp;lt;/code&amp;gt; directory to your windows system directory &amp;lt;code&amp;gt;system32&amp;lt;/code&amp;gt;.  You may want to use the shortcut to the &amp;lt;code&amp;gt;Debug&amp;lt;/code&amp;gt; folder which has been installed to the start menu for convenience.  &lt;br /&gt;
&lt;br /&gt;
For the copy to work, proceed as follows&lt;br /&gt;
* close &#039;&#039;Telephony and Modem Control Panel&#039;&#039; if you have it open&lt;br /&gt;
* shut down windows telephony service. This can be done from the Windows &#039;&#039;Service Control Panel&#039;&#039; or by invoking &amp;lt;code&amp;gt;net stop tapisrv&amp;lt;/code&amp;gt; from a command prompt&lt;br /&gt;
* copy the debug driver files to your system directory.  On x64 systems, be sure to use a 64bit application such as &#039;&#039;Windows File Explorer for&#039;&#039; (&amp;lt;code&amp;gt;explorer.exe&amp;lt;/code&amp;gt;) for this.  Windows will silently redirect any 32bit application to the &amp;lt;code&amp;gt;SysWOW64&amp;lt;/code&amp;gt; directory when accessing &amp;lt;code&amp;gt;system32&amp;lt;/code&amp;gt;.(if the copying fails, we recommend to deactivate the telephony service. But don’t forget to reset it to automatically if you are done copying). Overwrite the existing files: &amp;lt;code&amp;gt;installer.dll, installer.pdb, TSP8.pdb, TSP8.tsp&amp;lt;/code&amp;gt;&lt;br /&gt;
* if the copy does not succeed or the debug driver is not shown n the modem control panel after, it might be that a TAPI application re-starts the windows telephony before you actually to the copy.  If so, you can set the &#039;&#039;Startup type&#039;&#039; of the Windows &#039;&#039;Telephony&#039;&#039; service to &amp;lt;code&amp;gt;Disabled&amp;lt;/code&amp;gt; instead of &#039;&#039;Manual&#039;&#039; in the services control panel (&#039;&#039;services.msc&#039;&#039;). You can then &#039;&#039;Stop&#039;&#039; the services, copy the file and finally set the services mode back to &amp;lt;code&amp;gt;Manual&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When you open &#039;&#039;Telephony and Modem Control Panel&#039;&#039; again, you should notice that the TSP driver name has changed to the debug version.&lt;br /&gt;
&lt;br /&gt;
==== Switching back to the Retail Version ====&lt;br /&gt;
To go back from the debug to the release version, proceed as follows:&lt;br /&gt;
* close &#039;&#039;Telephony and Modem Control Panel&#039;&#039; if you have it open&lt;br /&gt;
* shut down windows telephony service. This can be done from the Windows &#039;&#039;Service Control Panel&#039;&#039; or by invoking &amp;lt;code&amp;gt;net stop tapisrv&amp;lt;/code&amp;gt; from a command prompt&lt;br /&gt;
* delete the debug driver files from your system directory.  On x64 systems, be sure to use a 64bit application such as &#039;&#039;Windows File Explorer for&#039;&#039; (&amp;lt;code&amp;gt;explorer.exe&amp;lt;/code&amp;gt;) for this.  Windows will silently redirect any 32bit application to the &amp;lt;code&amp;gt;SysWOW64&amp;lt;/code&amp;gt; directory when accessing &amp;lt;code&amp;gt;system32&amp;lt;/code&amp;gt;&lt;br /&gt;
* repair the installation using windows &#039;&#039;Programs Control Panel&#039;&#039; or by invoking the original .msi again&lt;br /&gt;
&lt;br /&gt;
There is no need to remove the driver from the &#039;&#039;Telephone and Modem Control Panel&#039;&#039;, as this would make you loose your driver configuration.&lt;br /&gt;
&lt;br /&gt;
Please note that simply re-installing the driver from the original .msi without removing it from the system directory will not work.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===References===&lt;br /&gt;
The test applications provided with this setup comes from [http://www.julmar.com Julmar Technology Inc].&lt;br /&gt;
&lt;br /&gt;
=== Limitations ===&lt;br /&gt;
&lt;br /&gt;
Please note that there currently is a limitation to 2000 users being in&lt;br /&gt;
all active groups of a particular user.  Thus, you cannot configure more&lt;br /&gt;
than 2000 users to be handled by TAPI on a single PBX.  This is a PBX&lt;br /&gt;
limitation (and applies for all PBX groups).&lt;br /&gt;
&lt;br /&gt;
TAPI has a flat line model.  That is, all line numbers (aka&lt;br /&gt;
&#039;&#039;extensions&#039;&#039;) are considered to live in a single name space.  As a&lt;br /&gt;
result, lines with identical numbers cannot be distinguished in TAPI&lt;br /&gt;
(although they can exist).   All extensions in all nodes of a PBX&lt;br /&gt;
numbering tree are represented as TAPI lines.  When the TSP works with a&lt;br /&gt;
PBX that implements a hierarchical numbering tree, then some lines may&lt;br /&gt;
receive identical numbers (their node-local extension which may overlap&lt;br /&gt;
between nodes depending on the setting of the &#039;&#039;Use pure node extensions&#039;&#039; property).  When a TAPI application uses these numbers to initiate&lt;br /&gt;
calls to such lines, the call will work or not work depending on the&lt;br /&gt;
calling lines position in the numbering tree (that is, lines within the&lt;br /&gt;
same node as the called line will be fine, others may fail).&lt;br /&gt;
&lt;br /&gt;
The PBX&#039;s SOAP interface (on top of which the TSP is built) has no primitives to initiate a directed call pick-up based on a target number.  The TSP will reject such requests with &#039;&#039;Operation not available&#039;&#039;.  Pickup by name (which is understood as a group name) or unspecific is supported though.&lt;br /&gt;
&lt;br /&gt;
==== Citrix Environments ====&lt;br /&gt;
What happens is that all Citrix sessions share the same TAPI driver. This allows all users in the Citrix sessions to select &amp;quot;their&amp;quot; line from the set of all TAPI lines. Then everything works as desired. It is important to note that theoretically one user can select the line of another user.&lt;br /&gt;
You can use the &amp;quot;Microsoft Remote TAPI Server&amp;quot;, to implement access rights for lines for separate Citrix sessions.&lt;br /&gt;
&lt;br /&gt;
===Known Problems===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* The TSP is not tested with Microsoft’s Remote Tapi Server.  While some installation have reported this to work fine, others have encountered problems.  This scenario is not supported by innovaphone&lt;br /&gt;
* The TSP will read its configuration when it is loaded by the system.  Thus, configuration changes require a re-load of the TSP.  Unfortunately, there is no reliable way to force the system to unload the TSP, so you may have to reboot the system for changes to take effect.  See the [[ Howto:Troubleshooting_the_TAPI_service_provider | TAPI trouble shooting article ]] for details&lt;br /&gt;
* The TSP will use HTTP basic authentication to talk the PBX.  So if you disable basic authentication in the PBX&#039;s configuration, the TSP will not work.  It is recommended to use HTTPS&lt;br /&gt;
* TAPI requires the TSP to assign a unique id to each line device.  This ID must not change between re-boots of the system or between upgrades of the TSP.  This is done by keeping a persistent table in the windows registry (in the &amp;lt;code&amp;gt;lineGUIDs&amp;lt;/code&amp;gt; subkey of &amp;lt;code&amp;gt;HKEY_LOCAL_MACHINE\SOFTWARE\innovaphone\innovaphone® PBX V8 TAPI Service Provider&amp;lt;/code&amp;gt;&amp;lt;ref name=&amp;quot;regkey&amp;quot;/&amp;gt;) that maps the PBX&#039;s line GUID to a fixed integer value (known as &#039;&#039;permanent line id&#039;&#039; in TAPI speak).  This key is retained even on uninstall.  To get rid of it, you must remove it manually&lt;br /&gt;
* Microsoft installer fails to remove driver files installed to the windows system folder.  This is why the TSP driver files are still present after an uninstall of the software.  To get rid of them, remove &amp;lt;code&amp;gt;TSP8.tsp&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;TSP8UI.dll&amp;lt;/code&amp;gt; from both &#039;&#039;%windir%&#039;&#039;&amp;lt;code&amp;gt;\system32&amp;lt;/code&amp;gt; and &#039;&#039;%windir%&#039;&#039;&amp;lt;code&amp;gt;\sysWOW64&amp;lt;/code&amp;gt;&lt;br /&gt;
* From Version 9, hotfix 1, the PBX firmware will not list objects tagged as [[Reference9:PBX/Objects#General_Object_Properties | &#039;&#039;hide from LDAP&#039;&#039; ]] in the result of a [[Reference9:Concept_SOAP_API#UserInfo.5B.5D_FindUser.28string_v501.2C_string_v700.2C_string_v800.2C_string_cn.2C_string_h323.2C_string_e164.2C_integer_count.2C_integer_next.29 | FindUser() ]] call.  As a result, such objects will not be shown in the TAPI configuration dialogue &#039;&#039;Username&#039;&#039; drop-down.  If you want to use such an object as &#039;&#039;TAPI User&#039;&#039; you can simply type in the name without selecting it from the drop down.&lt;br /&gt;
* Sometimes, setting configuration with &#039;&#039;TSP Control&#039;&#039; (not the telephone control panel dialogue) does not work due to windows&#039; &#039;&#039;User Access Control (UAC)&#039;&#039;, see [[Howto:TAPI_TSP_Control_Windows7]] for Details&lt;br /&gt;
* Various users have reported that first party TSP installations do not work reliably with Microsoft Outlook.  Symptoms reported are spurious error pop-ups from Outlook although there was no real problem.  We do not recommend first party installations anyway (see [[#Rolling_out_First_Party_TSPs_to_multiple_PCs]] for a reasoning), but these issues are related to Microsoft Outlook only.  No such problems have been reported with other first party TAPI applications. Consider using solutions like Estos ProCall instead.&lt;br /&gt;
* The number of parallel threads used within the TSP is limited to max. 60 per CPU.  As each connected PBX (amongst other things) is handled by a separate thread, if you have a large number of PBXs connected and only have a single CPU, you may run out of threads, resulting in a WARNING messages &#039;&#039;about to spawn new workerthread (n requests, m threads) -- but limit l exceeded&#039;&#039;.  This usually happens when you run the TSP on a virtualized platform such as vmWare and only dedicate a single CPU.  Ignoring this warning results in sluggish behaviour.  &lt;br /&gt;
* The TSP can work with dynamic PBXs too.  However, the TSP needs to determine the slave PBXs IP addresses from the master. If the slave is a dynamic PBX and it is hosted on the same device as the master and it is registered to the master using 127.0.0.1, the TSP will only learn the 127.0.0.1 as the slave&#039;s IP address.  Of course, connection to the slave PBX will fail then. &lt;br /&gt;
&lt;br /&gt;
==== TAPI Operation with 3rd party Phones or innovaphone Phones registered with SIP ====&lt;br /&gt;
Various TAPI functions rely on use of the [[Reference:Remote Control Facility|Remote Control Facility]] message.  This message is not supported in 3rd party phones and also not fully supported in innovaphone Phones when they are registered to the PBX using SIP.  Full TAPI functionality is thus only available for innovaphone phones registered to the PBX using H.323.&lt;br /&gt;
&lt;br /&gt;
Known Limitations:&lt;br /&gt;
* Accepting an incoming call (lineAnswer)&lt;br /&gt;
* Automatic initiation of an outgoing call in handsfree mode (instead, the calling phone first rings and starts the outgoing call upon of-hook)&lt;br /&gt;
* toggle between 2 calls active on a phone (lineSwapHold)&lt;br /&gt;
* initiation and termination of a 3PTY (lineCompleteTransfer with mode LINETRANSFERMODE_CONFERENCE, lineDrop on a conference call)&lt;br /&gt;
&lt;br /&gt;
==== TAPI on Windows8 / Server 2012 ====&lt;br /&gt;
&lt;br /&gt;
Windows8 doesn&#039;t let you disable &#039;&#039;User Access Control&#039;&#039; (UAC) completely.  This has the disadvantage that &#039;&#039;TSP Control&#039;&#039; (tsptray.exe) cannot change system registry entries, which it needs to do to e.g. change debug settings for the TSP.&lt;br /&gt;
&lt;br /&gt;
There are 2 ways around it: &lt;br /&gt;
# use the hidden &#039;&#039;Administrator&#039;&#039; account on Windows 8&lt;br /&gt;
# elevate the tsptray.exe application&lt;br /&gt;
&lt;br /&gt;
To use the elevated &#039;&#039;Administrator&#039;&#039; account on Windows 8 you first need to un-hide it:&lt;br /&gt;
* log in to an account with administrator rights  &lt;br /&gt;
* use the &#039;&#039;Windows-Key+X&#039;&#039; shortcut and select &#039;&#039;Command Prompt (Administrator)&#039;&#039; (&#039;&#039;Eingabeaufforderung (Administrator)&#039;&#039;). An elevated cmd prompt appears&lt;br /&gt;
* type &amp;lt;code&amp;gt;net user administrator /active:yes&amp;lt;/code&amp;gt;&lt;br /&gt;
* the fully elevated &#039;&#039;Administrator&#039;&#039; account is now available and you can log-in to this account as usual&lt;br /&gt;
* &#039;&#039;&#039;Please make sure the account has a password set - by default, it does not!!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
To elevate the tsptray.exe application;&lt;br /&gt;
* log in to an account with administrator rights  &lt;br /&gt;
* start a windows explorer&lt;br /&gt;
* change directory to &amp;lt;code&amp;gt;C:\Program Files\innovaphone AG\innovaphone® PBX V8-x64 TSP&amp;lt;/code&amp;gt;&lt;br /&gt;
* right click on &amp;lt;code&amp;gt;tsptray.exe&amp;lt;/code&amp;gt; and open the &#039;&#039;properties&#039;&#039; (&#039;&#039;Eigenschaften&#039;&#039;) menu&lt;br /&gt;
* switch to the &#039;&#039;Compatibility&#039;&#039; (&#039;&#039;Kompatibilität&#039;&#039;) tab&lt;br /&gt;
* tick the &#039;&#039;Run as administrator&#039;&#039; (&#039;&#039;Program als Administrator ausführen&#039;&#039;) check mark&lt;br /&gt;
* save the settings&lt;br /&gt;
&lt;br /&gt;
Please note that Windows 8 will not let you run any &amp;quot;Metro App&amp;quot; in elevated mode!&lt;br /&gt;
&lt;br /&gt;
===== HTTPS ===== &lt;br /&gt;
The TSP will not be able to talk to the PBX using HTTPS with Windows8 or Server2012.  This [[Reference8:Release_Notes_TAPI_V8#3722_-_HTTPS_SOAP_connections_did_not_work_on_Windows8_.2F_Server_2012|has been fixed]] with V8 TAPI Service Provider (32 and 64bit) - hotfix10.&lt;br /&gt;
===== .Net 3.5 missing on Server 2012 =====&lt;br /&gt;
Server 2012 has no support for .Net 3.5 by default.  Even more, it cannot be installed just by downloading it.  Instead, the &#039;&#039;NetFX3 Feature&#039;&#039; needs to be enabled.  Here is how:&lt;br /&gt;
&lt;br /&gt;
 Microsoft Windows [Version 6.2.9200]&lt;br /&gt;
 (c) 2012 Microsoft Corporation. Alle Rechte vorbehalten.&lt;br /&gt;
 &lt;br /&gt;
 C:\Users\Administrator&amp;gt;dism /online /enable-feature /featurename:NetFX3 /all /Source:&#039;&#039;&amp;lt;path to windows setup, e.g. d:&amp;gt;&#039;&#039;\sources\sxs /LimitAccess&lt;br /&gt;
&lt;br /&gt;
See also&lt;br /&gt;
* [http://blogs.technet.com/b/aviraj/archive/2012/08/04/windows-8-enable-net-framework-3-5-includes-net-2-0-and-3-0-i-e-netfx3-feature-in-online-amp-offline-mode.aspx?PageIndex=2 Windows 8: Enable .NET Framework 3.5]&lt;br /&gt;
* [http://msdn.microsoft.com/en-us/library/hh506443.aspx Installing the .NET Framework 3.5 on Windows 8]&lt;br /&gt;
&lt;br /&gt;
==== TAPI dialer fails from Outlook when Lync client was/is installed ====&lt;br /&gt;
We have received reports that 1st-party TAPI dial-out from Outlook does not work anymore when a Lync client was installed.  Some users report that this phenomenon occurred only after an upgrade to Windows 8.  Reportedly, this can be [http://support.microsoft.com/kb/959625/en-us fixed by setting a registry key as outlined in Microsoft&#039;s knowledge-base].  You may want to give this a try.  However, we have not seen this issue ourselves and thus can&#039;t comment on it further.&lt;br /&gt;
&lt;br /&gt;
==== Slow Network Performance ====&lt;br /&gt;
TAPI is pretty sensitive to slow network performance.  While the TSP is multi-threaded, some internal locking must be done so that slow requests to a PBX my block other pending requests, resulting in unpleasant performance.  The TSP will create &#039;&#039;Windows Event Log&#039;&#039; entries of type &#039;&#039;slow SOAP call performance&#039;&#039; if this is detected.  You should inspect your event log regularly and resolve the reason for such network performance.&lt;br /&gt;
&lt;br /&gt;
Long PBX request round-trips may have a number of reasons:&lt;br /&gt;
&lt;br /&gt;
; slow WAN performance : of course, if the WAN is slow or unstable, bad performance is the result&lt;br /&gt;
; inappropriate QoS : SOAP is using HTTP/HTTPS.  In a QoS enabled network, call signalling and RTP may work fine, whereas HTTP/HTTPS is considered to be of no importance.  You need to keep in mind that such QoS policy may lead to bad TAPI performance, as the SOAP traffic used by the TSP (being based on HTTP/HTTPS) may be delayed.  You should assign SOAP traffic a similar priority as you do for VoIP signalling&lt;br /&gt;
; overloaded PBX : HTTP traffic is treated on a low priority level in the PBX.  If the PBX runs near to 100% CPU load, while all RTP and VoIP signalling will work well still, HTTP traffic may get severely delayed.  You should make sure your PBX runs well under 100% CPU load to get good TAPI performance.  See [[Reference:Device Health Check]] for more details&lt;br /&gt;
&lt;br /&gt;
==== TAPI on Windows 10 ====&lt;br /&gt;
In Windows 10, the TSP is not allowed any longer to read/write its own registry tree.  For this reason, it is not possible to store or read the configuration.  As a result, the TSP will not work.  To fix this, you need to modify the registry access rights so that the TSP has read/write access to &amp;lt;code&amp;gt;HKEY_LOCAL_MACHINE\SOFTWARE\innovaphone\innovaphone® PBX V8 TAPI Service Provider&amp;lt;/code&amp;gt;&amp;lt;ref name=&amp;quot;regkey&amp;quot;/&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note on windows registry paths&amp;lt;ref name=&amp;quot;regkey&amp;quot;&amp;gt;&lt;br /&gt;
Due to a change in &#039;&#039;Windows Registry Access Rights&#039;&#039; in Windows 10, from Build 8165, the configuration is stored in &lt;br /&gt;
: &amp;lt;code&amp;gt;HKEY_LOCAL_MACHINE\SOFTWARE\innovaphone\innovaphone® PBX V8 TAPI Service Provider&amp;lt;/code&amp;gt;&lt;br /&gt;
(a place that is suitable for Windows 10 too). Before, the configuration was stored in &lt;br /&gt;
: &amp;lt;code&amp;gt;HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\innovaphone® PBX V8 TAPI Service Provider&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See [[#Upgrade_from_Build_8164_or_earlier| Upgrade from Build 8164 or_earlier ]] above for more details.&lt;br /&gt;
&amp;lt;/ref&amp;gt;:&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Tweaks ===&lt;br /&gt;
There are a few configuration options which should be used rarely.  They can be enabled by setting an appropriate registry key.&lt;br /&gt;
&lt;br /&gt;
Since Hotfix 15 the location to set the interop tweaks has been changed to &amp;lt;code&amp;gt;HKEY_LOCAL_MACHINE\SOFTWARE\innovaphone\innovaphone® PBX V8 TAPI Service Provider&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
; ProcessorMask : REG_DWORD. If set, the TSP will use &amp;lt;code&amp;gt;SetProcessAffinityMask(GetCurrentProcess(), set)&amp;lt;/code&amp;gt; to limit TSP execution to one or more of the existing processors.  Set to &amp;lt;code&amp;gt;0xff&amp;lt;/code&amp;gt; by default.&lt;br /&gt;
&lt;br /&gt;
; LineTimeOut : REG_DWORD. Can be set to a number of seconds the TSP should wait for the determination of lines to finish (default 90). On a large PBX, or a PBX with slow slaves, the determination might not finish in the default time frame.  If this happens, TAPI applications may show &#039;&#039;Line unnamed&#039;&#039; line entries in their line list.  If this is a problem, set it to a larger value (e.g. &amp;lt;code&amp;gt;120&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
; IgnoreDevStatus : REG_DWORD. Some applications get confused if TAPI reports line to be disconnected or out-of-service dynamically.  Setting this to a non-zero value will disable any such notification.&lt;br /&gt;
&lt;br /&gt;
; ClearFwdOnSet : REG_DWORD.  If set to a non-zero value, the TSP will clear all current call forward settings before a lineForward request is executed.  This implies that all call forward settings are &#039;&#039;replaced&#039;&#039; by the new settings.  Standard behaviour is to only modify the settings, that is, replace all current settings of the same type with the settings found in the lineForward request (for example, if there is only one setting in the request that defines a CFU, then the current CFU settings are replaced by the new one provided. All others, such as e.g. CFNR settings, are left untouched).&lt;br /&gt;
&lt;br /&gt;
: Tapi spec is pretty clear on how this should work: &#039;&#039;The provider should &amp;quot;unforward everything&amp;quot; prior to setting the new forwarding instructions&#039;&#039;.  Even though, for historical reasons, ClearFwdOnSet=0 has been the default in all TAPI versions prior to V8 hotfix 6, from hotfix 6 on, the default changes to 1, as this has turned out to be the widely accepted interpretation.&lt;br /&gt;
&lt;br /&gt;
; No3PTY : REG_DWORD. See [[Reference8:TAPI_Service_Provider#Notes_on_3PTY_Conferences | Notes_on_3PTY_Conferences]] below.&lt;br /&gt;
&lt;br /&gt;
; HiddenRecordingNumber: REG_SZ. Active recording in an innovaphone PBX is implemented as an implicit 3PTY conference with the recording sink as one of the parties.  These will be shown as usual in the TAPI callstate.  However, some applications get confused as this results in a situation, where a normal endpoint (read: phone) has more than one active (i.e. &#039;&#039;not on hold&#039;&#039;) call.  To suppress such calls in the TAPI call states, you can set this tweak to the number of the recording sink as configured in the phone&#039;s recording configuration tab.  If so, any outgoing call from an endpoint that is registered with a PBX user object with a called number that equals the setting of this tweak, will be suppressed.  So if your recording sink has the number &amp;lt;code&amp;gt;44&amp;lt;/code&amp;gt;, you would set this registry value to &amp;lt;code&amp;gt;44&amp;lt;/code&amp;gt; (this is available from TAPI V8 hotfix 8). Please note that this feature actually suppresses any call info for such calls, however, it does not revert previously announced call infos.  So if the call is initiated using &#039;&#039;overlapped dialling&#039;&#039;, all call states will be shown until the called number matches the value of &amp;lt;code&amp;gt;HiddenRecordingNumber&amp;lt;/code&amp;gt; and all subsequent call states will be suppressed.  This will probably leave the call shown in &#039;&#039;dialling&#039;&#039; state.  The feature should be used for destinations which are called using &#039;&#039;block dialling&#039;&#039; only thus.  &lt;br /&gt;
&lt;br /&gt;
; SilentHold : REG_DWORD. When a call is put on hold using &amp;lt;code&amp;gt;lineHold&amp;lt;/code&amp;gt;, the held party will hear &#039;&#039;music on hold&#039;&#039; emitted by the PBX. The hold-initiator will hear a dialling tone (PBX firmware v11r2 and up, with older versions the initiator would hear &#039;&#039;music on hold&#039;&#039;).  When &amp;lt;code&amp;gt;SilentHold&amp;lt;/code&amp;gt; is set to a non-zero value, the initiating party will hear silence - i.e. no dialling tone (this is available from TAPI V8 hotfix 8).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- There are some more values in a key underneath &amp;lt;code&amp;gt;HKEY_LOCAL_MACHINE\SOFTWARE\innovaphone\innovaphone® PBX V8 TAPI Service Provider&amp;lt;/code&amp;gt;&amp;lt;ref name=&amp;quot;regkey&amp;quot;/&amp;gt; called &amp;lt;code&amp;gt;Device&amp;lt;/code&amp;gt;&#039;&#039;XX&#039;&#039;: --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; NoDuplicateConnectedCalls : REG_DWORD. If set to 1, the TSP will never show more than one call per line to be active.  Extra active calls will be shown as &#039;&#039;on-hold&#039;&#039;. The situation occurs e.g. when a user initiates a 3PTY conference on the phone.  This essentially is a bug fix for Microsoft&#039;s OCS client which forces any extra active call on-hold, thereby disturbing the 3PTY function.  If your are using [http://www.estos.de/download/software/eccg.htm ESTOS&#039; Call Control Gateway]: from version &#039;&#039;2.0.1.1474 - 05.11.2008&#039;&#039; there is a fix for this same problem available.  This option thus is deprecated.&lt;br /&gt;
&lt;br /&gt;
; UseFirstLeg2 : REG_DWORD. TAPI allows only for a single leg-2 info (redirection information in case of a call forward).  If a call is forwarded mutliple times, by default the last redirection is shown in TAPI. If &amp;lt;code&amp;gt;UseFirstLeg2&amp;lt;/code&amp;gt; is set to 1 however, the first redirection is shown.&lt;br /&gt;
&lt;br /&gt;
; UseNameForDeviceGuid : REG_DWORD. The TSP will create a TAPI line for each &#039;&#039;Device&#039;&#039; of each PBX object (if &#039;&#039;MapDevices&#039;&#039; is set).  The internal unique identifier includes the &#039;&#039;Hardware Id&#039;&#039; found in the &#039;&#039;Device&#039;&#039;.  If this changes, the TAPI line representing the &#039;&#039;Device&#039;&#039; is considered new and a new TAPI &#039;&#039;permanent line id&#039;&#039; is allocated.  This may be annoying cause when a device serial number (e.g. for a telephone) is used as &#039;&#039;Hardware Id&#039;&#039;, replacing the device creates a new TAPI line.  If &#039;&#039;UseNameForDeviceGuid&#039;&#039; is set to 1, the TSP will use the &#039;&#039;Device&#039;&#039;s &#039;&#039;Name&#039;&#039; instead (which usually not changes).  While this might be more convenient, be aware that you &#039;&#039;must&#039;&#039; make sure that no PBX object has duplicate &#039;&#039;Name&#039;&#039;s!  Otherwise, TAPI will get confused.   Available from build 8178&lt;br /&gt;
&lt;br /&gt;
; ShowConfGUID : REG_DWORD.  If set and not 0, the TSP will implicitly set each call&#039;s CallData to a string such as &amp;quot;&amp;lt;code&amp;gt;conf-guid:&amp;lt;/code&amp;gt;&#039;&#039;call-guid&#039;&#039;&amp;quot;.   &#039;&#039;call-guid&#039;&#039; is a 66-byte Unicode16 string (32 hex characters plus terminating 0). Note that this will interfere with an application&#039;s use of the lineSetCallData function (tapi.h) and is therefore disabled by default. Available from build 8190&lt;br /&gt;
&lt;br /&gt;
===List of supported TSPI functions===&lt;br /&gt;
&lt;br /&gt;
The TSP supports the following TAPI Service Provider Interface Functions.  Note that these do not map one to one with TAPI user functions. For more information, see the Microsoft TAPI documentation.&lt;br /&gt;
&lt;br /&gt;
*TSPI_lineAnswer&lt;br /&gt;
*TSPI_lineBlindTransfer&lt;br /&gt;
*TSPI_lineClose                      &lt;br /&gt;
*TSPI_lineCloseCall                  &lt;br /&gt;
*TSPI_lineCompleteTransfer&lt;br /&gt;
*TSPI_lineDevSpecific&lt;br /&gt;
*TSPI_lineDevSpecificFeature&lt;br /&gt;
*TSPI_lineDial&lt;br /&gt;
*TSPI_lineDrop  &lt;br /&gt;
*TSPI_lineForward&lt;br /&gt;
*TSPI_lineGenerateDigits                     &lt;br /&gt;
*TSPI_lineGetAddressCaps             &lt;br /&gt;
*TSPI_lineGetAddressID               &lt;br /&gt;
*TSPI_lineGetAddressStatus           &lt;br /&gt;
*TSPI_lineGetCallAddressID           &lt;br /&gt;
*TSPI_lineGetCallHubTracking&lt;br /&gt;
*TSPI_lineGetCallIDs&lt;br /&gt;
*TSPI_lineGetCallInfo                &lt;br /&gt;
*TSPI_lineGetCallStatus              &lt;br /&gt;
*TSPI_lineGetDevCaps                 &lt;br /&gt;
*TSPI_lineGetExtensionID&lt;br /&gt;
*TSPI_lineGetID                      &lt;br /&gt;
*TSPI_lineGetLineDevStatus           &lt;br /&gt;
*TSPI_lineGetNumAddressIDs&lt;br /&gt;
*TSPI_lineHold&lt;br /&gt;
*TSPI_lineMakeCall      &lt;br /&gt;
*TSPI_lineNegotiateExtVersion&lt;br /&gt;
*TSPI_lineNegotiateTSPIVersion       &lt;br /&gt;
*TSPI_lineOpen    &lt;br /&gt;
*TSPI_linePark&lt;br /&gt;
*TSPI_linePickup&lt;br /&gt;
*TSPI_lineRedirect&lt;br /&gt;
*TSPI_lineSelectExtVersion&lt;br /&gt;
*TSPI_lineSendUserUserInfo&lt;br /&gt;
*TSPI_lineSetAppSpecific             &lt;br /&gt;
*TSPI_lineSetCallData&lt;br /&gt;
*TSPI_lineSetCallHubTracking&lt;br /&gt;
*TSPI_lineSetCallParams                 &lt;br /&gt;
*TSPI_lineSetCurrentLocation         &lt;br /&gt;
*TSPI_lineSetDefaultMediaDetection   &lt;br /&gt;
*TSPI_lineSetMediaMode               &lt;br /&gt;
*TSPI_lineSetStatusMessages          &lt;br /&gt;
*TSPI_lineSetupTransfer&lt;br /&gt;
*TSPI_lineSwapHold&lt;br /&gt;
*TSPI_lineUnhold&lt;br /&gt;
*TSPI_lineUnpark&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*TSPI_providerConfig                 &lt;br /&gt;
*TSPI_providerCreateLineDevice&lt;br /&gt;
*TSPI_providerEnumDevices            &lt;br /&gt;
*TSPI_providerGenericDialogData&lt;br /&gt;
*TSPI_providerInit                   &lt;br /&gt;
*TSPI_providerInstall                &lt;br /&gt;
*TSPI_providerRemove                 &lt;br /&gt;
*TSPI_providerShutdown               &lt;br /&gt;
*TSPI_providerUIIdentify     &lt;br /&gt;
=====Notes on Consultation Calls=====        &lt;br /&gt;
This TSP supports the &amp;lt;code&amp;gt;lineSetupTransfer&amp;lt;/code&amp;gt; function.  However, strictly speaking, this function is not needed and should not be used.  It is merely intended for applications which do not offer a consultation call interface to the user when this function is not available.  Instead, &amp;lt;code&amp;gt;TSPI_lineMakeCall&amp;lt;/code&amp;gt; can be used where &amp;lt;code&amp;gt;lineSetupTransfer&amp;lt;/code&amp;gt; would be otherwise.  The notion of a special &#039;&#039;consultation call&#039;&#039; is an idiosyncrasy forced by legacy PBX technologies which were not able to transfer two arbitrary calls.   In these scenarios, a potentially to-be-transferred call needed to be linked to the primary call.  The PBX can transfer two arbitrary calls and thus there is no need for &amp;lt;code&amp;gt;lineSetupTransfer&amp;lt;/code&amp;gt;.  This ability is indicated by the &amp;lt;code&amp;gt;LINEADDRCAPFLAGS_TRANSFERMAKE&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;LINEADDRCAPFLAGS_CONFERENCEMAKE &amp;lt;/code&amp;gt; flags.   The transfer is then requested by using &amp;lt;code&amp;gt;TSPI_lineCompleteTransfer&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=====Notes on 3PTY Conferences=====&lt;br /&gt;
The TSP supports the management of 3PTY conferences.  These can be initiated by using &amp;lt;code&amp;gt;TSPI_lineCompleteTransfer&amp;lt;/code&amp;gt; with &amp;lt;code&amp;gt;LINETRANSFERMODE_CONFERENCE&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;LINETRANSFERMODE_TRANSFER&amp;lt;/code&amp;gt;.  This is indicated by the flags &amp;lt;code&amp;gt;LINEADDRCAPFLAGS_CONFERENCEHELD&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;LINEADDRCAPFLAGS_CONFERENCEMAKE&amp;lt;/code&amp;gt;.  The 3PTY function is actually implemented by the innovaphone IP phones (such as IP2xx).  Therefore, these capabilities are only advertised if the line is based on a PBX user object.  Still, some lines where the capabilities are advertised cannot do 3PTY (such as e.g. DECT lines, analogue lines, 3rd party devices, ...). So the call to &amp;lt;code&amp;gt;TSPI_lineCompleteTransfer&amp;lt;/code&amp;gt; will succeed but the conference will not be initiated and the subsequent call states will not indicate a conference (as there is no).  &lt;br /&gt;
&lt;br /&gt;
Also, if non-telephone devices are registered with a PBX user object and these device have multiple concurrent calls (e.g. a call center connected with a multi-channel XCapi), these will be viewed as 3PTY calls (as this is the way such calls appear to the TAPI: a line with more than one non-held call).  If these calls are in fact no 3PTY, this may lead to confusing call indications from TAPI.  It is better to register such objects as a PBX gateway object.  Special treatment of 3PTY calls can be disabled by setting the registry flag &amp;lt;code&amp;gt;No3PTY&amp;lt;/code&amp;gt; (from build 8087 onwards).&lt;br /&gt;
&lt;br /&gt;
A 3PTY conference will create a new call handle for the conference.  The only operation available for such a handle is &amp;lt;code&amp;gt;TSPI_lineDrop&amp;lt;/code&amp;gt;. This will terminate the conference and restore the state active before the conference was initiated (that is, the phone that implemented the conference will now have 2 calls, one active and one on hold).  This is indicated by not setting &amp;lt;code&amp;gt;LINEADDRCAPFLAGS_CONFDROP&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A &amp;lt;code&amp;gt;lineDrop()&amp;lt;/code&amp;gt; on one of the 2 &#039;&#039;real&#039;&#039; calls involved will of course cancel this call and thus remove the 3PTY.&lt;br /&gt;
&lt;br /&gt;
======Notes on Intrusion Calls======&lt;br /&gt;
A special case of 3PTY is an intrusion call initiated by a [[Reference9:Phone/User/Function-Keys/Partner | partner function key]].  To TAPI, this looks like a 3PTY (which it in fact is).  However, phones before firmware version 9 hotfix 19 will not be able to release this 3PTY upon request.  Thus, you will see a 3PTY in TAPI which cannot be dropped.  From phone firmware 9 hotfix 19 on, the request to drop this 3PTY will cancel the intrusion call.  Note that TAPI will nevertheless &#039;&#039;not&#039;&#039; set &amp;lt;code&amp;gt;LINEADDRCAPFLAGS_CONFDROP&amp;lt;/code&amp;gt; on such conferences (as TAPI does not know that this is an intrusion call).&lt;br /&gt;
&lt;br /&gt;
======Notes on Recording Calls======&lt;br /&gt;
A special case of 3PTY is a recording call.  This effectively creates an user-invisible 3PTY on the phone.  To TAPI, this looks like a 3PTY (which it in fact is).  However, phones before firmware version 9 hotfix 19 will not be able to release this 3PTY upon request.  Thus, you will see a 3PTY in TAPI which cannot be dropped.  From phone firmware 9 hotfix 19 on, the request to drop this 3PTY will cancel the recording call.   Note that TAPI will nevertheless &#039;&#039;not&#039;&#039; set &amp;lt;code&amp;gt;LINEADDRCAPFLAGS_CONFDROP&amp;lt;/code&amp;gt; on such conferences (as TAPI does not know that this is a recording call).&lt;br /&gt;
&lt;br /&gt;
Recording calls are shown as normal conferences (unless &amp;lt;code&amp;gt;No3PTY&amp;lt;/code&amp;gt; is set).  This might be confusing to applications and/or users.  See the &amp;lt;code&amp;gt;HiddenRecordingNumber&amp;lt;/code&amp;gt; tweak above for a method to hide such calls.&lt;br /&gt;
&lt;br /&gt;
=====Notes on parked Calls=====&lt;br /&gt;
The PBX can park calls from and to any existing PBX object, e.g. by virtue of [[Reference8:Configuration/Registration/Function-Keys/Park | specific feature keys]].  They are parked to/from a numeric &#039;&#039;park position&#039;&#039;.  In SOAP however, calls are parked to an object by providing the objects &#039;&#039;&#039;UserInitialize()&#039;&#039;&#039; handle and a park position.  Parked calls are then reported as straight calls with a distinct signalling state (8).  The park position is not conveyed as part of the &#039;&#039;&#039;CallInfo&#039;&#039;&#039; record.  To unpark, &#039;&#039;&#039;[[Reference8:SOAP_API#integer_UserPickup.28int_user.2C_string_cn.2C_integer_call.2C_string_group.2C_int_reg.2C_InfoArray_info.29 | UserPickup]]&#039;&#039;&#039; can be used providing the parked calls call handle as &#039;&#039;&#039;call&#039;&#039;&#039; argument.  &lt;br /&gt;
&lt;br /&gt;
The TAPI specification is unclear on how the address information required to &#039;&#039;&#039;lineUnpark()&#039;&#039;&#039; a call can be obtained by an application (except that it is returned from &#039;&#039;&#039;linePark()&#039;&#039;&#039; if the call was parked using TAPI).    The TSP thus indicates parked calls on a line with a call reason &amp;lt;code&amp;gt;LINECALLREASON_PARKED&amp;lt;/code&amp;gt;.  The caller id information is set to the parked calls call handle.  This way, the application can take the caller id information and provide it to &#039;&#039;&#039;lineUnpark()&#039;&#039;&#039; to unpark a call.  If the appication does not support this mode of operation but supports &#039;&#039;&#039;lineUnpark()&#039;&#039;&#039; and lets the user input the park identifier, the user can just provide the caller id information.&lt;br /&gt;
&lt;br /&gt;
Some applications do not care for parked calls (by examining the call reason) and just blindly report these calls like ordinary connected calls (thereby confusing the user).  To work around this problem, reporting parked calls can be turned off in the TSP configuration dialogue.&lt;br /&gt;
&lt;br /&gt;
=====Notes on sending User to User Information =====&lt;br /&gt;
The TAPI specification for sending UserUserInfo closely resembles the way ISDN defines this service.  Although the innovaphone PBX supports this service both with H.323 and SIP, it is &#039;&#039;not&#039;&#039; supported in this TSP.  Instead, sending user to user information is implemented using H.323/SIP messaging.  However, there are some important deviations and limitations caused hereby:&lt;br /&gt;
* data is &#039;&#039;not transparent&#039;&#039;.  That is, the TSP only allows for null-terminated unicode to be sent.  The data must be of even length and the last two bytes must be null. &lt;br /&gt;
* data is &#039;&#039;not sent within the call&#039;&#039;, but by initiating a separate call.  This implies that the target number used to send the message carrying the data to is &#039;guessed&#039; from the available call data.  For example, if the call is in a connected state and a connected number is known, the message is sent to the connected number.  If the call is in the ringback state, then either the called number or - if available - the redirection number is used and so forth.&lt;br /&gt;
* message calls are not indicated by the SOAP CallInfo records.  As a result, messages (that is, user to user information) cannot be received with TAPI and &#039;&#039;lineReleaseUserUserInfo is not supported&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=====Notes on sending proprietary innovaphone Remote Control Facilities  =====&lt;br /&gt;
The SOAP  [[Reference8:SOAP_API#UserRc.28integer_call.2C_integer_rc.29|UserRc]] function allows to send various [[Reference:Remote Control Facility|facility messages]] to an innovaphone phone device.  In some cases, it is useful to be able to invoke this function through a standard TAPI mechanism.  This can be achieved by using the TAPI &#039;&#039;&#039;lineBlindTransfer&#039;&#039;&#039; function.  If the &#039;&#039;called party name&#039;&#039; provided as destination for the &#039;&#039;lineBlindTransfer&#039;&#039; (in &#039;&#039;lpszDestAddress&#039;&#039;) has the magic value &amp;lt;code&amp;gt;USERRC&amp;lt;/code&amp;gt;, then the &#039;&#039;called subaddress&#039;&#039; is converted to an integer and the result is sent as remote control facility to the call the blind transfer is applied for.  For details on how to code the &#039;&#039;called party name&#039;&#039; and the &#039;&#039;called subaddress&#039;&#039; into &#039;&#039;lpszDestAddress&#039;&#039; see [http://msdn.microsoft.com/en-us/library/windows/desktop/ms726017%28v=vs.85%29.aspx Microsoft&#039;s &#039;&#039;Canonical Address&#039;&#039; specification].     This works from TAPI8 hotfix 4.&lt;br /&gt;
&lt;br /&gt;
For example, initiating a blind transfer to &amp;lt;code&amp;gt;|16^USERRC&amp;lt;/code&amp;gt; (empty address, subaddress 16 (that is, [[Reference:Remote Control Facility|&#039;&#039;change to handset mode&#039;&#039;]]), called name &amp;lt;code&amp;gt;USERRC&amp;lt;/code&amp;gt;) will switch the phone having the call to be transferred into handset mode (and &amp;lt;code&amp;gt;|18^USERRC&amp;lt;/code&amp;gt; will switch it back to handsfree mode).  Of course, no actual transfer will happen in these cases (&#039;&#039;lineBlindTransfer&#039;&#039; is merely used as a vehicle to send the facility to the proper call).&lt;br /&gt;
&lt;br /&gt;
Such proprietary facility message can also be sent with &#039;&#039;lineMakeCall&#039;&#039; (that is, in SOAP&#039;s [[Reference8:SOAP_API#integer_UserCall.28integer_user.2C_string_cn.2C_string_e164.2C_string_h323.2C_int_reg.2C_InfoArray_info.2C_int_rc.2C_string_srce164.29|UserCall]] function).  For example, setting up a call to &amp;lt;code&amp;gt;123|21^USERRC&amp;lt;/code&amp;gt; will send an intrusion call to extension 123 and intrude any call that might be active there. This works from TAPI8 hotfix 6. Please note that the innovaphone TAPI service provider does not support TAPI&#039;s &#039;&#039;lineCompleteCall&#039;&#039; function with &amp;lt;code&amp;gt;LINECALLCOMPLMODE_INTRUDE&amp;lt;/code&amp;gt; though (as TAPI&#039;s call model here does not fit with the PBX&#039;s call model).  Please also note that intrusion calls look like 3PTY calls to TAPI (see [[#Notes_on_Intrusion_Calls|notes on intrusion calls]] above).&lt;br /&gt;
&lt;br /&gt;
Remote control facilities are implemented by the telephone devices, so these functions are subject to the phone firmware in use.&lt;br /&gt;
&lt;br /&gt;
[[Category:Howto|{{PAGENAME}}]]&lt;br /&gt;
[[Category:Concept|{{PAGENAME}}]]&lt;br /&gt;
&lt;br /&gt;
== Related Articles ==&lt;br /&gt;
* [[Howto:Troubleshooting the TAPI service provider]]&lt;br /&gt;
* [[Reference8:Release Notes TAPI]]&lt;/div&gt;</summary>
		<author><name>Bsiegwald</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Howto:Config_or_Password_Recovery&amp;diff=66474</id>
		<title>Howto:Config or Password Recovery</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Howto:Config_or_Password_Recovery&amp;diff=66474"/>
		<updated>2023-03-13T15:58:27Z</updated>

		<summary type="html">&lt;p&gt;Bsiegwald: Highlighting of command to send config, minor rephrasing for clarification, added related articles&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article describes approaches to recover devices with lost admin password.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Applies To==&lt;br /&gt;
This information applies to:&lt;br /&gt;
&lt;br /&gt;
*IP3000, boot 320&lt;br /&gt;
*IP400, boot 319&lt;br /&gt;
*IP21, boot 326&lt;br /&gt;
*IP200, boot 338&lt;br /&gt;
*IP800, boot 405&lt;br /&gt;
*IP6000, boot 132&lt;br /&gt;
*IP22,IP24,IP302,IP305, boot 357&lt;br /&gt;
&lt;br /&gt;
earlier boot code versions may not work or have different command names.&lt;br /&gt;
&lt;br /&gt;
==More Information==&lt;br /&gt;
&lt;br /&gt;
===Problem Details===&lt;br /&gt;
In case you have lost the password for an innovaphone device and there is no recent config backup available, you are still able to recover the device config.&lt;br /&gt;
&lt;br /&gt;
There are two possible solutions, depending on given requirements:&lt;br /&gt;
&lt;br /&gt;
*[[Howto:Config_or_Password_Recovery#Update_Server|Update Server approach]]  &lt;br /&gt;
*[[Howto:Config_or_Password_Recovery#TFTP|TFTP approach]]&lt;br /&gt;
&lt;br /&gt;
The prefered approach is to use an Update Server. The last resort is to use TFTP mode to download the device config. &lt;br /&gt;
&lt;br /&gt;
===System Requirements===&lt;br /&gt;
&lt;br /&gt;
Update Server approach:&lt;br /&gt;
*Update Server URL need to be configured &#039;&#039;&#039;before&#039;&#039;&#039; you have lost the password&lt;br /&gt;
&lt;br /&gt;
TFTP approach:&lt;br /&gt;
*appropriate boot code version need to be installed on device&lt;br /&gt;
*gwload.exe&lt;br /&gt;
*TFTP client&lt;br /&gt;
&lt;br /&gt;
===Update Server===&lt;br /&gt;
If you know that there is an [[Reference:Update_Server|Update Server]] URL configured on the device and you have access to the web server with an update script on it, you can change the polled update script as follows to reset the admin password on the device.&lt;br /&gt;
&lt;br /&gt;
 # reset password&lt;br /&gt;
 config change CMD0 /name mydevicehostname /log on /user admin,ip6000&lt;br /&gt;
 config write&lt;br /&gt;
 # encrypt it&lt;br /&gt;
 config activate&lt;br /&gt;
 # remove from visible config&lt;br /&gt;
 config change CMD0 /name mydevicehostname /log on &lt;br /&gt;
 # done&lt;br /&gt;
&lt;br /&gt;
In case one of ETH interfaces is configured as DHCP client, you can provide [[Reference:Update_Server|Update Server]] URL to device via DHCP.&lt;br /&gt;
&lt;br /&gt;
===TFTP===&lt;br /&gt;
If the prefered usage of the Update Server approach is not possible you have to get the device configuration via TFTP as a last resort. Make sure you have read articles about [[Howto:How_to_Reset_IPXXX_%2C_factory_default%2C_led_behaviour%2C_tftp_mode%2Cclear_config%2Cgwload|Factory Reset]] and [[Howto:How_to_use_gwload|Gwload Utility]], before you start to recover the device configuration via TFTP.&lt;br /&gt;
&lt;br /&gt;
====Set device to TFTP mode====&lt;br /&gt;
Setting the device in TFTP mode is made by pressing reset button on gateway for ca. 1,5-2 sec (active LED must blink 3 times). Be careful cause if you press reset button too long, it will perform a factory reset, which means the config is lost.&lt;br /&gt;
====Set IP adress of device with gwload====&lt;br /&gt;
Once set to TFTP mode, the device is without IP address so you have to set it with gwload:&lt;br /&gt;
&lt;br /&gt;
 gwload /gwtype 6000 /i 192.168.0.1 /setip&lt;br /&gt;
&lt;br /&gt;
====Download config from device using TFTP-Client====&lt;br /&gt;
Now you can use any TFTP client to download the config from device. There two different versions of boot code, so config file on device can be called &amp;lt;code&amp;gt;c&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;config&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Open shell of your operating system and type:&lt;br /&gt;
&lt;br /&gt;
 tftp -i 192.168.0.1 GET config config.txt&lt;br /&gt;
&lt;br /&gt;
or if you have device with older boot code version:&lt;br /&gt;
&lt;br /&gt;
 tftp -i 192.168.0.1 GET c config.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now you&#039;ll have a file with config text repeated several times in it, so you have to search for latest config that was saved in this ring buffer.&lt;br /&gt;
&lt;br /&gt;
This config can be changed to a known password ( e.g. config change CMD0 /user admin,ip6000 ). After sending this config to the device:&lt;br /&gt;
&lt;br /&gt;
 gwload /gwtype 6000 /i 192.168.0.1 /setip /cfg config.txt&lt;br /&gt;
&lt;br /&gt;
the new config is effective.&lt;br /&gt;
On the first start of the firmware the user/password definition is copied from the commandline to a crypted var.&lt;br /&gt;
&lt;br /&gt;
This procedure keeps the configuration and the flashdir (ldap) directory because no long reset is done.&lt;br /&gt;
&lt;br /&gt;
===Known Problems===&lt;br /&gt;
The &amp;lt;code&amp;gt;config.txt&amp;lt;/code&amp;gt; file recovered with TFTP only includes the partial configuration (lines starting with &amp;lt;code&amp;gt;config change&amp;lt;/code&amp;gt;).  No &amp;lt;code&amp;gt;vars&amp;lt;/code&amp;gt;, no &amp;lt;code&amp;gt;FLASHDIR&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;!-- == Related Articles == --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Related Articles ==&lt;br /&gt;
[[Howto:How to use gwload]]&lt;br /&gt;
&lt;br /&gt;
[[Howto:How_to_Reset_IPXXX_%2C_factory_default%2C_led_behaviour%2C_tftp_mode%2Cclear_config%2Cgwload | How to reset a IPxxx.]]&lt;br /&gt;
&lt;br /&gt;
[[Howto:Change the default admin password in the config file?]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Howto|{{PAGENAME}}]]&lt;/div&gt;</summary>
		<author><name>Bsiegwald</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Reference13r3:Concept_App_Platform&amp;diff=63281</id>
		<title>Reference13r3:Concept App Platform</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Reference13r3:Concept_App_Platform&amp;diff=63281"/>
		<updated>2022-09-02T17:22:33Z</updated>

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

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

		<summary type="html">&lt;p&gt;Bsiegwald: Added info on which table the configuration info for the msi package should be placed in.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Concept|myPBX]]&lt;br /&gt;
= Overview =&lt;br /&gt;
myPBX is the UC client of the innovaphone PBX. It is intended for assisting typical phone users with their everyday tasks. It consists of two parts:&lt;br /&gt;
* A &#039;&#039;&#039;web application&#039;&#039;&#039; that runs in any modern web browser. It provides the functionality needed for audio telephony, instant messaging, monitoring peoples statuses and more.&lt;br /&gt;
* The &#039;&#039;&#039;myPBX launcher&#039;&#039;&#039; is a Windows application that integrates the myPBX web application into the Windows desktop and adds some interesting additional features like video telephony and Outlook integration.&lt;br /&gt;
&lt;br /&gt;
== Web application ==&lt;br /&gt;
The main user interface is an HTML5 application that runs in a web browser. It communicates with the PBX using HTTP-Requests (AJAX). The actual session logic is implemented inside the PBX.&lt;br /&gt;
&lt;br /&gt;
The picture shows how call control is done. The myPBX session has access to the phone registration as they are both located in the same PBX. Thus it can monitor and create or modify calls.&lt;br /&gt;
&lt;br /&gt;
[[Image:Mypbx_overview.png]]&lt;br /&gt;
&lt;br /&gt;
The web application also includes a [[{{NAMESPACE}}:Concept myPBX WebRTC Softwarephone|WebRTC Softwarephone]] that works with some browsers.&lt;br /&gt;
&lt;br /&gt;
== myPBX launcher ==&lt;br /&gt;
The launcher is a tool for integrating myPBX into the Windows desktop. It is not needed in order to use myPBX but it adds some convenient functions that are not available otherwise.&lt;br /&gt;
* Automatically open the myPBX web application on startup.&lt;br /&gt;
* Desktop notifications.&lt;br /&gt;
* Integrating external applications.&lt;br /&gt;
* [[{{NAMESPACE}}:Concept_myPBX_Video|Video telephony]]&lt;br /&gt;
* [[{{NAMESPACE}}:Concept myPBX Application Sharing|Application sharing]]&lt;br /&gt;
* [[{{NAMESPACE}}:Concept myPBX Office Integration|Office Integration]]&lt;br /&gt;
* Hotkey for dialing numbers out of any Windows application.&lt;br /&gt;
* Set the status depending on user activity.&lt;br /&gt;
* Switch to a standby PBX if the main PBX is down.&lt;br /&gt;
* Write trace files.&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
===PBX===&lt;br /&gt;
* myPBX license&lt;br /&gt;
* Reporting installation (for seeing recent calls in the history), although no reporting license is needed (as opposed to V9)&lt;br /&gt;
&lt;br /&gt;
===Launcher===&lt;br /&gt;
* Windows 7 32bit/64bit or higher&lt;br /&gt;
* .NET 4.5.2&lt;br /&gt;
* Microsoft Visual C++ 2013 Redistributable (x86)&lt;br /&gt;
&lt;br /&gt;
===Web browser===&lt;br /&gt;
&lt;br /&gt;
If the myPBX is started inside the launcher, an embedded browser is used, so there are no special requirements.&lt;br /&gt;
&lt;br /&gt;
If myPBX is started in a web browser that is installed on the local system, the browser must fulfill the following requirements:&lt;br /&gt;
&lt;br /&gt;
* Current browser version&lt;br /&gt;
* JavaScript enabled&lt;br /&gt;
* HTML5 XMLHttpRequest (AJAX) enabled&lt;br /&gt;
* HTML5 Web Storage (DOMStorage) enabled&lt;br /&gt;
* HTML5 Cross-document messaging (postMessage) enabled&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note: For IE the minimum supported version is IE 10.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Email addresses===&lt;br /&gt;
myPBX builds an email address of a user with the name (H323) and the System Name of the PBX.&amp;lt;br&amp;gt;&lt;br /&gt;
So if the System Name is &#039;&#039;&#039;innovaphone.com&#039;&#039;&#039; and the name (H323) of the user is &#039;&#039;&#039;test&#039;&#039;&#039;, the resulting email address is &#039;&#039;&#039;test@innovaphone.com&#039;&#039;&#039;.&amp;lt;br&amp;gt;&lt;br /&gt;
So for every user an email address with this combination should exist.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
This email address should be the primary SMTP address in your Exchange Server.&amp;lt;br&amp;gt;&lt;br /&gt;
If this can&#039;t be done, make sure, that there is a SIP address on your Exchange user, which matches this email address.&lt;br /&gt;
&lt;br /&gt;
See [[{{NAMESPACE}}:Configure_Active_Directory_Replication#Notes_on_replicating_the_new-in-V10_email_User_Attribute]] for details on replicating the email attribute from &#039;&#039;Active Directory&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Related technology ==&lt;br /&gt;
* myPBX uses the [[{{NAMESPACE}}:Concept_Reporting|innovaphone Reporting]] as a database for call lists. Alternatively the local [[{{NAMESPACE}}:Services/Call-Lists|call list service]].&lt;br /&gt;
* The [[{{NAMESPACE}}:Concept_Exchange_Calendar_Connector|Exchange Calendar Connector]] sets the presence of PBX users depending on their Exchange Calendar. myPBX can display that presence.&lt;br /&gt;
== Features ==&lt;br /&gt;
For a feature overview refer to [[Reference12r1:Concept_myPBX_derviates_and_features|myPBX derivates and features]].&lt;br /&gt;
&lt;br /&gt;
= Configuration =&lt;br /&gt;
&lt;br /&gt;
== PBX ==&lt;br /&gt;
&#039;&#039;&#039; Basic configuration &#039;&#039;&#039;&lt;br /&gt;
* Make sure you have installed the appropriate licenses.&lt;br /&gt;
** &#039;&#039;myPBX&#039;&#039; for the web application.&lt;br /&gt;
** &#039;&#039;Video&#039;&#039; for video telephony.&lt;br /&gt;
* Activate the licenses for the inidiviual user objects (&#039;&#039;License&#039;&#039; tab). This can also be done using config templates.&lt;br /&gt;
* Enable myPBX on the page &#039;&#039;PBX/Config/myPBX&#039;&#039;.&lt;br /&gt;
* To support call lists at the client, configure the &#039;&#039;Call List Service&#039;&#039; in [[{{NAMESPACE}}:PBX/Config/myPBX#Call_List_Service|&#039;&#039;PBX/Config/myPBX&#039;&#039;]]&lt;br /&gt;
&#039;&#039;&#039; Additional hints &#039;&#039;&#039;&lt;br /&gt;
* Only users with a password can login to myPBX.&lt;br /&gt;
* There should be a dedicated device configured at the user object for each phone registration.&lt;br /&gt;
* To use mobile phones, the mobility device must have a name in the fork config at the user object.&lt;br /&gt;
* The LDAP configuration is taken from the phone config at the user object.&lt;br /&gt;
* The dialling location has to be configured at the phone config of the user object.&lt;br /&gt;
* Phones should be registered using the PBX password so that user can change their login password without affecting the phone registrations.&lt;br /&gt;
* If federation is used (&amp;quot;use as domain&amp;quot; checked), the user names and the PBX system name should match the email addresses of people.&lt;br /&gt;
&lt;br /&gt;
== Launcher ==&lt;br /&gt;
myPBX supports various &#039;&#039;MSI parameters&#039;&#039; which can be modified using Microsoft&#039;s &#039;&#039;Orca&#039;&#039; tool for individually tailored deployment (see the [https://support.microsoft.com/en-us/help/255905/how-to-use-the-orca-database-editor-to-edit-windows-installer-files respective Microsoft Knowledge Base Article] for details on using Orca).  You can then roll-out myPBX using your favourite software deployment tool (or, if you don&#039;t have one, using Windows Policies, see [https://support.microsoft.com/en-us/help/816102/how-to-use-group-policy-to-remotely-install-software-in-windows-server this Microsoft Microsoft Knowledge Base Article on &#039;&#039;Group Policies&#039;&#039;] for details). &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Basic configuration &#039;&#039;&#039;&lt;br /&gt;
* The configuration dialog is located in the context menu of the tray icon.&lt;br /&gt;
* Configure the &#039;&#039;URL&#039;&#039; in the myPBX tab (e.g. &amp;lt;code&amp;gt;http://x.x.x.x/PBX0/MY/client.htm&amp;lt;/code&amp;gt;).&lt;br /&gt;
* From v10 beta1 to beta4 the URL was &amp;lt;code&amp;gt;http://x.x.x.x/PBX0/MY/mypbx10.htm&amp;lt;/code&amp;gt;. From v10 beta5 the normal URL (&amp;lt;code&amp;gt;client.htm&amp;lt;/code&amp;gt;) is used.  &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Deployment &#039;&#039;&#039;&lt;br /&gt;
* Administrators can specify a default configuration using MSI parameters within the table &#039;&#039;&#039;Property&#039;&#039;&#039; when deploying the software.&lt;br /&gt;
** &amp;lt;code&amp;gt;URL&amp;lt;/code&amp;gt; - The primary URL.&lt;br /&gt;
** &amp;lt;code&amp;gt;URL2&amp;lt;/code&amp;gt; - The secondary URL (standby PBX).&lt;br /&gt;
** &amp;lt;code&amp;gt;TRACE&amp;lt;/code&amp;gt; - Write trace files (&amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;).&lt;br /&gt;
** &amp;lt;code&amp;gt;OFFICETRACE&amp;lt;/code&amp;gt; - Enable Office Presence Logging (&amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;).&lt;br /&gt;
** &amp;lt;code&amp;gt;AUTOSTART&amp;lt;/code&amp;gt; - Autostart myPBX (&amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;).&lt;br /&gt;
** &amp;lt;code&amp;gt;AUTOAPPEAROFFLINE&amp;lt;/code&amp;gt; - Detect user activity on the computer in order to set the IM status (&amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;, or the number of minutes).&lt;br /&gt;
** &amp;lt;code&amp;gt;APPNAME&amp;lt;/code&amp;gt; - The display name of the external application.&lt;br /&gt;
** &amp;lt;code&amp;gt;APPPATH&amp;lt;/code&amp;gt; - The path to the executable or the URI of the external application (may contain placeholders).&lt;br /&gt;
** &amp;lt;code&amp;gt;APPPARAMS&amp;lt;/code&amp;gt; - The command line parameters for the external application (may contain placeholders).&lt;br /&gt;
** &amp;lt;code&amp;gt;APPAUTOSTART&amp;lt;/code&amp;gt; - Start automatically on call.&lt;br /&gt;
&lt;br /&gt;
* Additional parameters from V10 SR3:&lt;br /&gt;
** &amp;lt;code&amp;gt;SHOWINTASKBAR&amp;lt;/code&amp;gt; - Show the myPBX launcher in the Windows Task Bar (&amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;).&lt;br /&gt;
** &amp;lt;code&amp;gt;STARTMINIMIZED&amp;lt;/code&amp;gt; - Start the myPBX launcher minimized (&amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;).&lt;br /&gt;
** &amp;lt;code&amp;gt;DOCKING&amp;lt;/code&amp;gt; - The docking mode of the launcher window (&amp;lt;code&amp;gt;none&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;left&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;right&amp;lt;/code&amp;gt;).&lt;br /&gt;
** &amp;lt;code&amp;gt;HOTKEY&amp;lt;/code&amp;gt; - The hotkey number (see registry of configured launcher).&lt;br /&gt;
** &amp;lt;code&amp;gt;HOTKEYMOD&amp;lt;/code&amp;gt; - The hotkey modifier number (see registry of configured launcher).&lt;br /&gt;
** &amp;lt;code&amp;gt;HOTKEYACTION&amp;lt;/code&amp;gt; - (&amp;lt;code&amp;gt;copy&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;show&amp;lt;/code&amp;gt;).&lt;br /&gt;
** &amp;lt;code&amp;gt;VIDEO&amp;lt;/code&amp;gt; - Enable video telephony and application sharing (&amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;).&lt;br /&gt;
** &amp;lt;code&amp;gt;VIDEOPROXY&amp;lt;/code&amp;gt; - Proxy server for the video websocket connection.&lt;br /&gt;
** &amp;lt;code&amp;gt;NOTIFICATIONS&amp;lt;/code&amp;gt; - Turns desktop notification on or off (&amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;).&lt;br /&gt;
** &amp;lt;code&amp;gt;SOUNDS&amp;lt;/code&amp;gt; - Turns notification sounds on or off (&amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;).&lt;br /&gt;
** &amp;lt;code&amp;gt;LANG&amp;lt;/code&amp;gt; - A two-letter language code.&lt;br /&gt;
&lt;br /&gt;
* Additional parameters from V10 SR6:&lt;br /&gt;
** &amp;lt;code&amp;gt;OFFICEPROVIDER&amp;lt;/code&amp;gt; - Set office presence provider (default &amp;lt;code&amp;gt;myPBX&amp;lt;/code&amp;gt;, empty string none, otherwise e.g. &amp;lt;code&amp;gt;Communicator&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
* Additional parameters from V10 SR7:&lt;br /&gt;
** &amp;lt;code&amp;gt;OFFICEPRESENCE&amp;lt;/code&amp;gt; - false: removes the office presence provider feature from myPBX (default &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
* Additional parameters from V11:&lt;br /&gt;
** &amp;lt;code&amp;gt;SOFTWAREPHONEAUTOSTART&amp;lt;/code&amp;gt; - If &amp;quot;true&amp;quot;, the Softwarephone will be started and stopped together with myPBX. Also, the PBX and User Parameters (GK IP-Address, GK-ID, Username and Password) are copied from the myPBX Client into the SoftwarePhone (&amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;). &lt;br /&gt;
&lt;br /&gt;
* Additional parameters from 12r2:&lt;br /&gt;
** &amp;lt;code&amp;gt;CONFIGHIDEMASK&amp;lt;/code&amp;gt; - With that parameter the administrator can hide certain parts of the configuration dialog. To calculate the hide mask add the desired values:&lt;br /&gt;
*** 1 - Tab &amp;quot;myPBX&amp;quot;&lt;br /&gt;
*** 4 - Tab &amp;quot;Office integration&amp;quot;&lt;br /&gt;
*** 8 - Tab &amp;quot;Video and application sharing&amp;quot;&lt;br /&gt;
*** 16 - Tab &amp;quot;External application&amp;quot;&lt;br /&gt;
*** 32 - Link &amp;quot;Open trace folder&amp;quot;&lt;br /&gt;
** &amp;lt;code&amp;gt;DEFAULTUSERNAME&amp;lt;/code&amp;gt; - The default username for the login&lt;br /&gt;
** &amp;lt;code&amp;gt;DEFAULTPASSWORD&amp;lt;/code&amp;gt; - The default password for the login&lt;br /&gt;
** &amp;lt;code&amp;gt;DEVTOOLS&amp;lt;/code&amp;gt; - If &amp;quot;true&amp;quot;, the context menu of the browser will show the &amp;quot;Inspect element&amp;quot; function that opens the developer tools.&lt;br /&gt;
** &amp;lt;code&amp;gt;OUTLOOKCONTACTSEARCH&amp;lt;/code&amp;gt; - If &amp;quot;true&amp;quot;, the search for outlook is set.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Command line parameters &#039;&#039;&#039;&lt;br /&gt;
* The following command line parameters can be used to specify special options for running the launcher. For example the parameters are useful for starting many instances on the same computer for demonstration purposes.&lt;br /&gt;
** &amp;lt;code&amp;gt;/url [URL]&amp;lt;/code&amp;gt; - Overrides the URL from the configuration&lt;br /&gt;
** &amp;lt;code&amp;gt;/user [USER NAME]&amp;lt;/code&amp;gt; - Starts the web application with the given user name&lt;br /&gt;
** &amp;lt;code&amp;gt;/password [PASSWORD]&amp;lt;/code&amp;gt; - Starts the web application with the given password&lt;br /&gt;
** &amp;lt;code&amp;gt;/multi&amp;lt;/code&amp;gt; - &#039;&#039;&#039;This parameter is for testing purposes, only. Do not use in a productive environment.&#039;&#039;&#039; It allows to start multiple instances of the launcher. You may want to combine this option with other configuration options such as &amp;lt;code&amp;gt;/url&amp;lt;/code&amp;gt; to use different configurations without the need to re-configure.  The parameter also disables saving the configuration to the registry. So changing the configuration in the configuration dialog does not work.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Type of Service (ToS) &#039;&#039;&#039;&lt;br /&gt;
* The settings of the ToS values for video RTP and signalling packets can be done using Policy-based Quality of Service (QoS), as described in this wiki article:&lt;br /&gt;
** [[Howto:Set Type of Service %28ToS%29 DiffServ DSCP Values for innovaphone Windows Applications %28SoftwarePhone%2C myPBX_Video%29]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Registry Paths &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
myPBX stores its settings at the following locations:&lt;br /&gt;
* &amp;lt;code&amp;gt;HKEY_LOCAL_MACHINE\Software\innovaphone\myPBX&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;HKEY_CURRENT_USER\Software\innovaphone\myPBX&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: The acutal location where windows stores the settings may vary due to windows conventions and settings.&lt;br /&gt;
&lt;br /&gt;
See also: [[Reference10:Concept_myPBX_Office2010_Integration#Outlook_doesn.27t_recognize_myPBX_as_presence_provider]]&lt;br /&gt;
&lt;br /&gt;
== Web application ==&lt;br /&gt;
When started in a web browser, the following URL parameters can be used to do a basic configuration.&lt;br /&gt;
* &amp;lt;code&amp;gt;lang=fr&amp;lt;/code&amp;gt; - Give a two-letter language code to change the language of the user interface&lt;br /&gt;
* &amp;lt;code&amp;gt;touch=false&amp;lt;/code&amp;gt; - Loads the version for use with mouse and keyboard.&lt;br /&gt;
* &amp;lt;code&amp;gt;touch=true&amp;lt;/code&amp;gt; - Loads the version for touch devices.&lt;br /&gt;
* &amp;lt;code&amp;gt;phys=&amp;lt;/code&amp;gt;&#039;&#039;location&#039;&#039; - Forces the PBX to assume the physical location of the WebRTC client used in this instance has the specified [[{{NAMESPACE}}:PBX_Locations#The_physical-location | physical location ]]&lt;br /&gt;
&lt;br /&gt;
= Details =&lt;br /&gt;
== Login ==&lt;br /&gt;
&lt;br /&gt;
=== PBX stored password ===&lt;br /&gt;
&lt;br /&gt;
* The short name (H.323-ID) of the user object is used as the login user name.&lt;br /&gt;
* The password of the user object is used as the login password.&lt;br /&gt;
* Users without a password cannot use myPBX.&lt;br /&gt;
* The local session information is stored in the DOMStorage of the web browser. It is deleted when the user logs out.&lt;br /&gt;
&lt;br /&gt;
In a multi PBX scenario myPBX must be connected to the same PBX as the phone. Therefore after login the user is redirected like follows:&lt;br /&gt;
* PBXes accept the login if they are in charge.&lt;br /&gt;
* Slaves redirect to the master if they are not in charge.&lt;br /&gt;
: Note: redirection requires previous authentication.  The user must be known to the redirecting slave PBX thus.&lt;br /&gt;
* The master redirects to the slave that is in charge.&lt;br /&gt;
* Inactive standby PBXes redirect to the master.&lt;br /&gt;
* Active standby PBXes accept the login.&lt;br /&gt;
Additionally you can configure an alternative URL in the myPBX launcher that shall be used when myPBX can&#039;t connect to the primary URL.&lt;br /&gt;
&lt;br /&gt;
=== Netlogon ===&lt;br /&gt;
&lt;br /&gt;
See [[Reference12r1:Concept_Netlogon_and_myPBX_Windows_Authentication]]&lt;br /&gt;
&lt;br /&gt;
== Devices ==&lt;br /&gt;
The different phones of the user are addressed by the device of the user object where they are registered at. Therefore there should be no more than a single registration per device. Mobile phones can be integrated using the mobility object. It is mandatory that the mobility has a device name in the fork configuration.&lt;br /&gt;
&lt;br /&gt;
== SIP URIs ==&lt;br /&gt;
* The &#039;&#039;use as domain&#039;&#039; checkmark on the page &#039;&#039;PBX/Config/General&#039;&#039; enables addressing users across PBXes using SIP URIs.&lt;br /&gt;
** The system name of the PBX is used as the domain-part.&lt;br /&gt;
** The short name (H.323-ID) of the user object is used as the local-part.&lt;br /&gt;
* The constructed URI looks like an email address (user@example.com) and it should only contain characters that would also be allowed for email addresses.&lt;br /&gt;
* In myPBX the URI can be used for telephony and instant messaging. For local users the domain-part can be omitted (&amp;lt;code&amp;gt;user&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;user@example.com&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
== Presence ==&lt;br /&gt;
* In the innovaphone PBX there are different possible sources of user presence, called &#039;&#039;contacts&#039;&#039;.&lt;br /&gt;
** &amp;lt;code&amp;gt;tel:&amp;lt;/code&amp;gt; - Phone presence&lt;br /&gt;
** &amp;lt;code&amp;gt;calendar:&amp;lt;/code&amp;gt; - Presence set by the Exchange Calendar Connector&lt;br /&gt;
* myPBX sets the presence for the &amp;lt;code&amp;gt;tel:&amp;lt;/code&amp;gt; contact. &lt;br /&gt;
* The displayed user presence is a mixed presence that is derived from the indiviual presence sources by the PBX. It consists of the following information:&lt;br /&gt;
** Acitivty (&amp;lt;code&amp;gt;available&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;away&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;busy&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;lunch&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;vacation&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;dnd&amp;lt;/code&amp;gt;)&lt;br /&gt;
** Note&lt;br /&gt;
** Phone status (&amp;lt;code&amp;gt;open&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;closed&amp;lt;/code&amp;gt;, sometimes displayed as &amp;lt;code&amp;gt;online&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;offline&amp;lt;/code&amp;gt;)&lt;br /&gt;
** IM status (&amp;lt;code&amp;gt;open&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;closed&amp;lt;/code&amp;gt;, sometimes displayed as &amp;lt;code&amp;gt;online&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;offline&amp;lt;/code&amp;gt;)&lt;br /&gt;
* The activity &amp;lt;code&amp;gt;dnd&amp;lt;/code&amp;gt; (do not distrurb) has a special meaning. If it is set, myPBX rejects all incoming chat messages. The phones can also be configured to reject incoming calls, if &amp;lt;code&amp;gt;dnd&amp;lt;/code&amp;gt; is set.&lt;br /&gt;
&lt;br /&gt;
== Visibility ==&lt;br /&gt;
For presence and dialog monitoring access rights (visibility rules) have to be configured at the individual user objects. The admin can do that in the &amp;quot;Access&amp;quot; dialog. Templates can be used to configure rights at many user objects at a time. In myPBX users can change the values given by the administrator and add their own rules.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Rules refer to&#039;&#039;&#039;&lt;br /&gt;
* A user (by name, &amp;lt;code&amp;gt;alice&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;alice@example.com&amp;lt;/code&amp;gt;).&lt;br /&gt;
* All users of a domain (by domain suffix, &amp;lt;code&amp;gt;@example.com&amp;lt;/code&amp;gt;).&lt;br /&gt;
* or all active users of a group (by group name). Group rules can only be added by the administrator.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Rules turn the following rights on or off&#039;&#039;&#039;&lt;br /&gt;
* Online status (phone and IM status, see chapter Presence)&lt;br /&gt;
* Presence (activity and note, see chapter Presence)&lt;br /&gt;
* Busy state (if the user has phone calls or not)&lt;br /&gt;
* IDs (the remote name and number of phone calls)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If a user is member of a group, all active members of that group have implicit access rights. These rights can be configured as the &amp;quot;Group Default Visibility&amp;quot; at the PBX. If there is no matching rule (implicit or explicit) the monitoring party does not see any information.&lt;br /&gt;
&lt;br /&gt;
Administrators should configure default visibility rules that match the companies privacy policy. Typical users should not have to change the visibility settings. It is recommended to use a template that defines at least a rule for the local domain. If users shall be able to configure the visibility for certain groups, a default rule for each of that groups should also be added.&lt;br /&gt;
&lt;br /&gt;
== Favourites ==&lt;br /&gt;
The user can add up to 32 phone numbers or SIP URIs as favourites. The favourites appear in myPBX for quick access. Also the presence and the calls are monitored and displayed, if possible. The user can create multiple lists of favourites and switch between them.&lt;br /&gt;
&lt;br /&gt;
== Directory search ==&lt;br /&gt;
Users can search for phone numbers and other information in an internal and an external LDAP directory. The directories are configured in the phone config that is stored at the user object in the PBX. Templates can be used to share the same configuration across multiple users.&lt;br /&gt;
&lt;br /&gt;
The directory is also used for resolving the names of external callers.&lt;br /&gt;
&lt;br /&gt;
Some LDAP servers do not return any results if non-existing name or number attributes are configured. Attribute names are case sensitive.&lt;br /&gt;
&lt;br /&gt;
== Instant messaging ==&lt;br /&gt;
myPBX is a chat client that can handle live chats between users. The PBX does not store chat messages, so both users have to be online at the same time.&lt;br /&gt;
&lt;br /&gt;
Chat conferences can be started by adding more people. In this case received text messages are relayed to the other participants. Also the list of participants is transmitted to each endpoint.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Smileys&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
myPBX displays emoticons in the text of chat messages as smileys. Here are the text codes that are supported.&lt;br /&gt;
&lt;br /&gt;
  [[Image:Emo happy.png]] happy      :-)    :)    (-:    (:&lt;br /&gt;
  [[Image:Emo normal.png]] normal     :-|    :|    |-:    |:&lt;br /&gt;
  [[Image:Emo sad.png]] sad        :-(    :(    )-:    ):&lt;br /&gt;
  [[Image:Emo mixed.png]] mixed      :-/    :/    :-\    :\    \-:    \:&lt;br /&gt;
  [[Image:Emo twinkle.png]] twinkle    ;-)    ;)    (-;    (;&lt;br /&gt;
  [[Image:Emo lol.png]] lol        :-D    :D &lt;br /&gt;
  [[Image:Emo tongue.png]] tongue     :-p    :p    :-P    :P    q:    q-:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Typing indications&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
myPBX transmits a notification when a user is typing a chat message. This can be seen by the other participants of the chat session.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Starting a related phone call&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If there is a single other participant in a chat session, the chat windows shows a call button to start a phone call to the other person. The call button is hidden if the own phone is not registered.&lt;br /&gt;
&lt;br /&gt;
== Application sharing ==&lt;br /&gt;
Support for external application sharing is deprecated, since we now have integrated [[{{NAMESPACE}}:Concept myPBX Application Sharing|Application sharing]] in the myPBX launcher.&lt;br /&gt;
&lt;br /&gt;
== Apps ==&lt;br /&gt;
&lt;br /&gt;
From v12r2 there is a new &#039;&#039;Home&#039;&#039; button. It opens a new third area (in addition to the &#039;&#039;buddies&#039;&#039; and &#039;&#039;call history&#039;&#039;) where is possible to start &#039;&#039;PBX apps&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
PBX apps available in v12r2:&lt;br /&gt;
*[[{{NAMESPACE}}:PBX/Objects/Boolean|Boolean]] (activation, deactivation, timer)&lt;br /&gt;
*[[{{NAMESPACE}}:PBX/Objects/Conference|Conference]] (caller list, mute, exclusive speakermode, disconnect participants)&lt;br /&gt;
*User [[{{NAMESPACE}}:PBX/Objects/Settings|Settings]] for dynamic group membership&lt;br /&gt;
&lt;br /&gt;
For configuration refer to object specific reference articles.&lt;br /&gt;
&lt;br /&gt;
=== Activation=== &lt;br /&gt;
*Restart myPBX&lt;br /&gt;
*select home symbol at bottom&lt;br /&gt;
*select right sided pen &lt;br /&gt;
*select apps to be used &amp;amp; store settings&lt;br /&gt;
&lt;br /&gt;
[[Image:Mypbx_activate_apps.png]]&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
The history shows recent calls. The calls are retrieved from an instance of the [[{{NAMESPACE}}:Concept_Reporting|innovaphone Reporting]] service or alternatively the local [[{{NAMESPACE}}:Services/Call-Lists|call list service]]. The call details include the call flow before and after the user was connected. When a user calls someone back from the history, the call is marked as answered in the reporting database. As this is done using the conference ID of the call even other users can see who called back at what time.&lt;br /&gt;
&lt;br /&gt;
When using [[{{NAMESPACE}}:Concept_Reporting|innovaphone Reporting]] history shows the last 20 calls that were made and when we click in the &amp;quot;arrow&amp;quot; button the next 20 calls are appended to the list, if we use the local [[{{NAMESPACE}}:Services/Call-Lists|call list service]] the number calls displayed it&#039;s set on the configuration menu.&lt;br /&gt;
&lt;br /&gt;
== Tracing and logging ==&lt;br /&gt;
myPBX can write session information to the syslog of the PBX. Check the &amp;quot;myPBX&amp;quot; checkmark on the page Maintenance/Diagnostics/Logging in order to turn it on.&lt;br /&gt;
&lt;br /&gt;
If the checkmark &amp;quot;Write trace&amp;quot; is enabled in the launcher configuration, the launcher writes a rotation of trace files to the folder &amp;lt;code&amp;gt;C:\Users\[UserName]\AppData\Roaming\innovaphone\myPBX&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Interfaces for integration =&lt;br /&gt;
The myPBX launcher has a number of generic interfaces that can be used to integrate it with other applications.&lt;br /&gt;
&lt;br /&gt;
== Protocol handlers ==&lt;br /&gt;
During installation myPBX registers protocol handlers for the following URI types:&lt;br /&gt;
;tel: start a phone call&lt;br /&gt;
;sip: start a phone call&lt;br /&gt;
;sips: start a phone call&lt;br /&gt;
;phone: start a phone call&lt;br /&gt;
;im: start a chat&lt;br /&gt;
&lt;br /&gt;
They can be used to start calls and chats in myPBX from external applications.&lt;br /&gt;
&lt;br /&gt;
=== Dialing from the Windows command prompt ===&lt;br /&gt;
Execute the following command to dial the number 012345.&lt;br /&gt;
  start tel:012345&lt;br /&gt;
&lt;br /&gt;
Execute the following command to call user@example.com.&lt;br /&gt;
  start sip:user@example.com&lt;br /&gt;
&lt;br /&gt;
Execute the following command to start a chat with user@example.com&lt;br /&gt;
  start im:user@example.com&lt;br /&gt;
&lt;br /&gt;
=== Dialing from a web page ===&lt;br /&gt;
This HTML link dials the number 012345, when clicked.&lt;br /&gt;
  &amp;lt;a href=&amp;quot;tel:012345&amp;quot;&amp;gt;012345&amp;lt;/a&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This HTML link calls user@example.com, when clicked.&lt;br /&gt;
  &amp;lt;a href=&amp;quot;sip:user@example.com&amp;quot;&amp;gt;user@example.com&amp;lt;/a&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This HTML link starts a chat with user@example.com, when clicked.&lt;br /&gt;
  &amp;lt;a href=&amp;quot;im:user@example.com&amp;quot;&amp;gt;user@example.com&amp;lt;/a&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Hotkey ==&lt;br /&gt;
A hotkey can be configured that copies selected phone numbers from most applications to myPBX. There is can be used for dialing, call transfer and so on.&lt;br /&gt;
&lt;br /&gt;
When the hotkey is pressed, myPBX will simulate a CTRL-C key which should instruct the current foreground application to copy whatever is selected in to the Windows clipboard. If the clipboard content changes due to this, myPBX will use it as &#039;&#039;number-to-dial&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Starting an external application for a call ==&lt;br /&gt;
myPBX can start an external application for an incoming call. Both web applications and applications that are installed on the client PC can be configured. This configuration can be done in the launcher in the tab &amp;quot;External application&amp;quot; or using MSI parameters during installation.&lt;br /&gt;
&lt;br /&gt;
The following settings can be done:&lt;br /&gt;
* &amp;lt;code&amp;gt;Name&amp;lt;/code&amp;gt; - The name of the application as it should appear in myPBX.&lt;br /&gt;
* &amp;lt;code&amp;gt;Path&amp;lt;/code&amp;gt; - The path of the applicaiton. This can be an URL (&amp;lt;code&amp;gt;http://crm.example.com/customer-by-number/$n&amp;lt;/code&amp;gt;) or the path to a local application (&amp;lt;code&amp;gt;C:\crm\application.exe&amp;lt;/code&amp;gt;).&lt;br /&gt;
* &amp;lt;code&amp;gt;Parameters&amp;lt;/code&amp;gt; - The command line parameters of the application. This field can be left empty for web applications.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;Path&amp;lt;/code&amp;gt; and the &amp;lt;code&amp;gt;Parameters&amp;lt;/code&amp;gt; may contain placeholders that are replaced by phone call information.&lt;br /&gt;
* &amp;lt;code&amp;gt;$n&amp;lt;/code&amp;gt; - phone number of the caller as seen&lt;br /&gt;
* &amp;lt;code&amp;gt;$N&amp;lt;/code&amp;gt; - phone number of the caller, normalized to national number format, e.g. 070317300988&lt;br /&gt;
* &amp;lt;code&amp;gt;$I&amp;lt;/code&amp;gt; - phone number of the caller, normalized to international number format, e.g. +4970317300988&lt;br /&gt;
* &amp;lt;code&amp;gt;$u&amp;lt;/code&amp;gt; - uri of the caller&lt;br /&gt;
* &amp;lt;code&amp;gt;$d&amp;lt;/code&amp;gt; - display name of the caller&lt;br /&gt;
* &amp;lt;code&amp;gt;$c&amp;lt;/code&amp;gt; - conference ID (a global ID for the call)&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;code&amp;gt;Name&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;Path&amp;lt;/code&amp;gt; are configured, an additional button will appear in myPBX at phone calls that starts the application.&lt;br /&gt;
&lt;br /&gt;
= Troubleshooting =&lt;br /&gt;
== Connection problems / Refreshes ==&lt;br /&gt;
Symptom: When in idle state, the myPBX web application reloads every 30 seconds. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
This might be a problem with the [http://msdn.microsoft.com/en-us/library/aa918417.aspx TCP/IP settings of the PC].  You should set &amp;lt;code&amp;gt;ReceiveTimeOut&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;KeepAliveTimeout&amp;lt;/code&amp;gt; to the default settings if they have been changed to smaller values.  Please note that the values must be specified in milliseconds!&lt;br /&gt;
&lt;br /&gt;
== Loss of DOM Storage Information ==&lt;br /&gt;
Symptom: myPBX is asking for username and password each time it is started.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
See [[Howto:MyPBX and roaming Profiles (e.g. Citrix) - myPBX forgetting login info]] for a possible resolution.&lt;br /&gt;
&lt;br /&gt;
= Appendix =&lt;br /&gt;
&lt;br /&gt;
== Known Limitations==&lt;br /&gt;
Since V12r2, myPBX allow to use WebRTC technology as softwarephone client. In this case, audio and thus headset handling is done by the browser.  Please note that headset physical buttons and its functions such as &amp;quot;onhook/offhook&amp;quot; will not be supported by the browser and hence not by myPBX running the WebRTC endpoint.&lt;br /&gt;
&lt;br /&gt;
== Known Issues ==&lt;br /&gt;
&lt;br /&gt;
===Office application crashes===&lt;br /&gt;
If you have Lync installed and installed myPBX afterwards and you wanted to use Lync/Communicator as Office presence provider, an office application might have crashed.&amp;lt;br&amp;gt;&lt;br /&gt;
The MSI parameter OFFICEPRESENCE allows you to disable all office presence related installation, so a Lync installation won&#039;t be broken. You can&#039;t use myPBX as presence provider anymore in this case, but Lync will still work correctly.&amp;lt;br&amp;gt;&lt;br /&gt;
If your installation is already broken, you can simply repair your Lync installation and Office won&#039;t crash anymore.&amp;lt;br&amp;gt;&lt;br /&gt;
If you want to use myPBX as presence provider, reinstall myPBX without the MSI parameter.&lt;br /&gt;
&lt;br /&gt;
Update: Latest hotfix (November 2017) for SFB/Lync client fixes the issue of the crash with the Outlook-Plugin or issues with the search on the Lync client, so with this newer version both CTI clients could be installed on the same PC without problems.&lt;br /&gt;
&lt;br /&gt;
== CPU usage ==&lt;br /&gt;
Connected myPBX sessions need additional resources on the PBX. When all extensions die myPBX, you can have approximately a 1/3 the amount of users per box than without using it.&lt;br /&gt;
&lt;br /&gt;
== Network traffic ==&lt;br /&gt;
In idle state the web application needs an empty message exchange every 30 seconds in order to keep the session alive. This messages take about 800 bytes. So per session the minimum network traffic is approximately:&lt;br /&gt;
* 1600 B/min&lt;br /&gt;
* 94 kB/h&lt;br /&gt;
* 2.2 MB/d&lt;br /&gt;
&lt;br /&gt;
== Included open source software ==&lt;br /&gt;
The myPBX web application contains the following open source software:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;rc4.js&#039;&#039;&#039;&lt;br /&gt;
   * RC4 symmetric cipher encryption/decryption&lt;br /&gt;
   * Copyright (c) 2006 by Ali Farhadi.&lt;br /&gt;
   * released under the terms of the Gnu Public License.&lt;br /&gt;
   * see the GPL for details.&lt;br /&gt;
   *&lt;br /&gt;
   * Email: ali[at]farhadi[dot]ir&lt;br /&gt;
   * Website: http://farhadi.ir/&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;sha1.js&#039;&#039;&#039;&lt;br /&gt;
   *  Secure Hash Algorithm (SHA1)&lt;br /&gt;
   *  http://www.webtoolkit.info/&lt;/div&gt;</summary>
		<author><name>Bsiegwald</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Howto:Create_Conference_facility&amp;diff=20827</id>
		<title>Howto:Create Conference facility</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Howto:Create_Conference_facility&amp;diff=20827"/>
		<updated>2011-04-13T16:27:23Z</updated>

		<summary type="html">&lt;p&gt;Bsiegwald: /* Problems with inbound dialing and access from trunk line */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:3rd Party Input}}&lt;br /&gt;
==Applies To==&lt;br /&gt;
This information applies to&lt;br /&gt;
&lt;br /&gt;
* IP 6000, V6 SR2&lt;br /&gt;
* IP 800, V6 SR2&lt;br /&gt;
* IP 305, V6 SR2&lt;br /&gt;
&lt;br /&gt;
 NB: this solution will work with V6, V7 and V8 firmware only as the [[Reference9:Gateway/Interfaces#Conferencing_interface_.28CONF.29 | CONF interface behaviour has changed with V9]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Keywords: conference room --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==More Information==&lt;br /&gt;
Conference facilities can be created direct on the innovaphone gateway. There are two possibilities to create a conference:&lt;br /&gt;
&lt;br /&gt;
1) Manually inbound dialed to the conference room&lt;br /&gt;
&lt;br /&gt;
2) Broadcast dialed out to a specified group. When the group members pick up the phone, they are in the conference room.&lt;br /&gt;
&lt;br /&gt;
In both cases you need to activate the CONF interface and register this to a user object. If you also want to the Broadcast possibilitiy, please see the [[Reference:Administration/PBX/Objects/Call_Broadcast_Conference|Call Broadcast Object]].&lt;br /&gt;
&lt;br /&gt;
==Conference Interface==&lt;br /&gt;
Go to &#039;&#039;&#039;Gateway - Interfaces&#039;&#039;&#039; and open &#039;&#039;&#039;CONF&#039;&#039;&#039;. Create a registration on a PBX.&lt;br /&gt;
&lt;br /&gt;
[[Image:CONF_Interface.PNG]]&lt;br /&gt;
&lt;br /&gt;
Go to &#039;&#039;&#039;PBX - Objects&#039;&#039;&#039; and create an &#039;&#039;&#039;User Object&#039;&#039;&#039;. Give it the same name / number as the CONF Interface. See that the object is registered.&lt;br /&gt;
&lt;br /&gt;
[[Image:CONF_object.PNG]]&lt;br /&gt;
&lt;br /&gt;
==Using the Conference room - inbound dialing==&lt;br /&gt;
&lt;br /&gt;
The users have to agree about which conference ID they want to use (0...9). More than one conference can run on the same time when they have different ID. The users call the number for the Conference user object + ID + #.&lt;br /&gt;
&lt;br /&gt;
In our sample the object has no 87 and we use ID 0:&lt;br /&gt;
 870#&lt;br /&gt;
&lt;br /&gt;
All users dialing 870# come into the same conference room.&lt;br /&gt;
&lt;br /&gt;
===Problems with inbound dialing and access from trunk line===&lt;br /&gt;
&lt;br /&gt;
In some countries, the number of digits in a call number is fixed. (ex Norway 8 digits). In this case the add on ID digit and # is blocked in the network, and because of the connection is not fulfilled, the additional digits are not sent as DTMF.&lt;br /&gt;
&lt;br /&gt;
====Solution 0: Route the incoming call to the conference====&lt;br /&gt;
&lt;br /&gt;
In this case, you have to use a Number Map object in the PBX. So when you are calling from outside e.g. &#039;&#039;&#039;22446686&#039;&#039;&#039;, you reach the internal Number Map object &#039;&#039;&#039;86&#039;&#039;&#039;, that maps the call to &#039;&#039;&#039;870#&#039;&#039;&#039; thus reaching the conference room.&lt;br /&gt;
&lt;br /&gt;
====Solution 1: Check who is calling====&lt;br /&gt;
&lt;br /&gt;
The problem with the previous solution is that everybody from outside also can reach this conference room. A solution is to call a &#039;&#039;&#039;Waiting Queue&#039;&#039;&#039; from outside and use a Call Forward (CFU) dependent on caller ID. In the following example, Waiting Queue &#039;&#039;&#039;86&#039;&#039;&#039; is forwarded to &#039;&#039;&#039;872#&#039;&#039;&#039; (conference room ID 2#) if outside caller 90909090 or 91919191 is calling. If users from outside caller 225566xx are calling, they are transferred to room 3. All other callers will hear the innovaphone internal waiting music, or the Waiting Queue voice message if such is specified. Here you can give a message to the caller.&lt;br /&gt;
&lt;br /&gt;
[[Image:Conference Facility Boolean CFU.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
It is also possible to &amp;quot;open&amp;quot; and &amp;quot;close&amp;quot; the conference room, setting the Boolean Object &#039;&#039;&#039;konf switch&#039;&#039;&#039; True and False, and activate / deactivate the Call Forward depended on Boolean status. You can set it True and False with a function key on your phone.&lt;br /&gt;
&lt;br /&gt;
====Solution 2: Ask for a PIN-code====&lt;br /&gt;
&lt;br /&gt;
Another solution would be to route the calls for the Conference to a Waiting Queue. &lt;br /&gt;
In this Waiting Queue a message is played: &amp;quot;Welcome to ... Please enter your PIN-code to enter the Conference...&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
With the DTMF-possibilities of the Waiting Queue-object, you can check whether the caller knows the correct PIN...&lt;br /&gt;
&lt;br /&gt;
First create a new Waiting Queue-object:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Long Name&#039;&#039;&#039;: Conference CheckPin&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Name&#039;&#039;&#039;: Conference CheckPin&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Number&#039;&#039;&#039;: 500&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:WQ_Conf_1.gif]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Second configure the announcement when this Waiting Queue is called:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Queue -&amp;gt; First Announcement -&amp;gt; URL&#039;&#039;&#039;: http://127.0.0.1/DRIVE/CF0/Announcements/checkPin.$coder?coder=g711a,g711u,g729&amp;amp;repeat=true&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Queue -&amp;gt; Alert TimeOut&#039;&#039;&#039;: 0&lt;br /&gt;
&lt;br /&gt;
With these two options the &#039;checkPin&#039;-file (which is located on the local CF-card and contains the text &amp;quot;Welcome... Please enter you PIN-Code...&amp;quot;) is played directly (TimeOut = 0) whenever this Waiting Queue is called and this announcement is repeated constantly ($repeat=true).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Finally, the different PIN-codes to access the Conference-room have to be configuered:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Queue -&amp;gt; DTMF&#039;&#039;&#039;: 1230 (this is the PIN-Code the caller has to enter)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Queue -&amp;gt; DTMF -&amp;gt; Dest. No&#039;&#039;&#039;: 870# (this is the combination of the Conference-object (&#039;87&#039;) and Conference-ID (0#)).&lt;br /&gt;
&lt;br /&gt;
So when the caller presses 1230 he or she enters the Conference with ID 0...&lt;br /&gt;
(You can add more PIN-codes for different or the same Conference-room (see screenshot))&lt;br /&gt;
&lt;br /&gt;
[[Image:WQ_Conf_2.gif]]&lt;br /&gt;
&lt;br /&gt;
== Related Articles ==&lt;br /&gt;
&lt;br /&gt;
[[Category:Howto|{{PAGENAME}}]]&lt;br /&gt;
* [[Reference:Administration/Gateway/Interfaces#Conferencing_interface_.28CONF.29|Administration/Gateway/Interfaces]]&lt;br /&gt;
* [[Reference:Administration/PBX/Objects/Call_Broadcast_Conference|Administration/PBX/Objects/Call Broadcast Conference]]&lt;br /&gt;
* [[Reference7:Administration/PBX/Objects/Call_Broadcast_Conference|Reference7:Administration/PBX/Objects/Call Broadcast Conference]]&lt;br /&gt;
* [[Reference9:Gateway/Interfaces]]&lt;/div&gt;</summary>
		<author><name>Bsiegwald</name></author>
	</entry>
</feed>