<?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=Npa</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=Npa"/>
	<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Special:Contributions/Npa"/>
	<updated>2026-05-09T10:46:42Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.42.3</generator>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Reference14r1:Concept_Contact_Widgets&amp;diff=70922</id>
		<title>Reference14r1:Concept Contact Widgets</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Reference14r1:Concept_Contact_Widgets&amp;diff=70922"/>
		<updated>2024-02-22T12:10:28Z</updated>

		<summary type="html">&lt;p&gt;Npa: /* Adding Agent to Widget */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Concept|Conference]]&lt;br /&gt;
&lt;br /&gt;
= Applies To =&lt;br /&gt;
* innovaphone PBX from version 14r1&lt;br /&gt;
* innovaphone Application Platform&lt;br /&gt;
&lt;br /&gt;
= Requirements =&lt;br /&gt;
* innovaphone PBX&lt;br /&gt;
* innovaphone Application Platform&lt;br /&gt;
* Firmware Version 14r1&lt;br /&gt;
* One &#039;&#039;&#039;Port License&#039;&#039;&#039; is used by the app service to establish a VoIP registration at the PBX&lt;br /&gt;
* &#039;&#039;&#039;Video License&#039;&#039;&#039; (optional) is required to establish video connections [*]&lt;br /&gt;
* &#039;&#039;&#039;Widget License&#039;&#039;&#039; (optional) is required to remove any &#039;innovaphone&#039; branding from the Widget UI&lt;br /&gt;
&lt;br /&gt;
[*] &#039;&#039;&#039;UC License&#039;&#039;&#039; can also be used since it includes a &#039;&#039;&#039;Video License&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= What is a Contact Widget? =&lt;br /&gt;
A Contact Widget (or Website Widget) is an element that can be added to a website. It offers to website visitors a way to get in contact with agents (e.g. help-desk). Website visitors can start chat sessions (asking questions, getting answers) or can start voice or even video calls.&lt;br /&gt;
&lt;br /&gt;
An nice example for a &amp;quot;Sidebar Widget&amp;quot; can be viewed [https://www.innovaphone.com/de/ip-telefonie/innovaphone-pbx.html here].&amp;lt;br&amp;gt;&lt;br /&gt;
When you have opened this website the Sidebar Widget comes slowly into view on the right side.&lt;br /&gt;
&lt;br /&gt;
Example of a Business-Cards-Widget:&lt;br /&gt;
&lt;br /&gt;
[[File:Cardset-widget.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example of a Sidebar-Widget:&lt;br /&gt;
&lt;br /&gt;
[[File:Sidebar-Widget.png]]&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
[[File:Concept-widgets-overview.png|thumb|Overview]]&lt;br /&gt;
The central part of the new Widgets-Concept is the &#039;&#039;&#039;Contact-Widgets-App&#039;&#039;&#039;.&lt;br /&gt;
The Contact Widgets App is installed on the innovaphone Application Platform and it allows a PBX user to define Contact Widgets.&lt;br /&gt;
&lt;br /&gt;
Contact Widgets can be integrated in a Website to offer easy ways to website users to contact &#039;&#039;&#039;Agents&#039;&#039;&#039;. Agents are PBX users meant to communicate with external clients.&amp;lt;br&amp;gt;&lt;br /&gt;
There are 2 fundamental types of Contact Widgets:&lt;br /&gt;
* &#039;&#039;&#039;Sidebar Widgets&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Business Cards Widgets&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A Sidebar Widget appears one side of the website trying to take as less space as possible. The website visitor can expand the Sidebar Widget if interested.&amp;lt;br&amp;gt;&lt;br /&gt;
A Business Cards Widget appears as integrated part of the website content, offering one (or more) contacts in form of ordinary business cards.&lt;br /&gt;
&lt;br /&gt;
= Configuration =&lt;br /&gt;
For non experienced technicians have a look at [[Howto14r1:Install_Contact_Widget_App#Installation]] and follow the installation steps mentioned in the how-to article.&lt;br /&gt;
&lt;br /&gt;
Others:&lt;br /&gt;
* Download the &#039;Contact Widgets App&#039; via App Store.&lt;br /&gt;
* Install the App on the App Platform Manager.&lt;br /&gt;
* Create an instance for the Widgets App on the Manager. We recommend to use no capital letters and no special characters (also not such as space).&lt;br /&gt;
* Create a new PBX Object with the PBX Manager Plugin. (*)&lt;br /&gt;
* Assign App to authorized (admin) users, which will be allowed to create/change/delete Contact Widgets.&lt;br /&gt;
&lt;br /&gt;
Experts:&lt;br /&gt;
(*) You can also create the PBX Object manually:&amp;lt;br&amp;gt;&lt;br /&gt;
* Create a new object of type &amp;quot;App&amp;quot;.&lt;br /&gt;
* Give it a &amp;quot;Long Name&amp;quot; (&amp;quot;Contact Widgets&amp;quot;) and a Name (&amp;quot;widgets&amp;quot;) same as the instance-name.&lt;br /&gt;
* Give it a password, same as the instance password.&lt;br /&gt;
* On the &amp;quot;App&amp;quot; tab configure URL to App Service on App Platform (&amp;quot;http://&amp;lt;ipaddress-or-dnsname&amp;gt;/&amp;lt;instance-name&amp;gt;/innovaphone-widgets&amp;quot;).&lt;br /&gt;
* Activate option &amp;quot;Websocket&amp;quot;&lt;br /&gt;
* Grant access to APIs: &amp;quot;PbxSignal&amp;quot; (mandatory), &amp;quot;Admin&amp;quot; (optional) and &amp;quot;PbxApi&amp;quot; (mandatory)&lt;br /&gt;
&lt;br /&gt;
= Using the Contact Widgets App =&lt;br /&gt;
Click on one of the buttons (depending on what type of widget you want to create):&lt;br /&gt;
* [+ Add new sidebar widget]&lt;br /&gt;
* [+ Add new business cards widget]&lt;br /&gt;
A new (empty) widget is displayed. You can give the widget a name by clicking the pen-symbol. The widget name helps to identify widgets as soon the number of widgets starts to grow.&amp;lt;br&amp;gt;&lt;br /&gt;
You can expand and collaps widgets by clicking the header of each widget.&lt;br /&gt;
[[Image:Widget-code-new-widget.png|thumb|New Widget]]&lt;br /&gt;
&lt;br /&gt;
== Creating a new Widget ==&lt;br /&gt;
&lt;br /&gt;
New Widget features and options&lt;br /&gt;
&lt;br /&gt;
*You can add the main contact details for this widget&lt;br /&gt;
*Select the default language&lt;br /&gt;
*Set your prefered font settings&lt;br /&gt;
*Change the colour settings&lt;br /&gt;
*Change the margin settings&lt;br /&gt;
*z-index&lt;br /&gt;
&lt;br /&gt;
[[Image:Widget-new-widget-features.png|thumb|Widget Features]]&lt;br /&gt;
&lt;br /&gt;
== Adding Agent to Widget ==&lt;br /&gt;
You can add and remove Agents to a Widget. Agents can be contacted by external website visitors.&amp;lt;br&amp;gt;&lt;br /&gt;
New agents are added by clicking the [+] button inside the agents container.&lt;br /&gt;
[[File:Adding-new-agents.png|thumb|Adding agents]]&lt;br /&gt;
A dialog opens where you can define the agent. It all starts with the agent&#039;s &#039;SIP-ID&#039;. That&#039;s the dialable PBX user address. You can use the search function to find a PBX user by name.&lt;br /&gt;
&lt;br /&gt;
There are several (optional) attributes you can set for an agent, like &#039;Display name&#039;, &#039;Phone number&#039;, &#039;Email address&#039; and &#039;Picture&#039;. A picture can be placed by drag &amp;amp; drop or can be selected from local disk by clicking the placeholder rectangle.&lt;br /&gt;
&lt;br /&gt;
Finally you can define the ways of communication the agent is available for:&lt;br /&gt;
* Voice-only calls&lt;br /&gt;
* Video calls (including voice)&lt;br /&gt;
* Chat&lt;br /&gt;
* Email&lt;br /&gt;
&lt;br /&gt;
For a Business-Cards-Widget the order of agents could be relevant. You can change the order of agents in the Widgets-App by easy drag &amp;amp; drop using the mouse.&lt;br /&gt;
&lt;br /&gt;
Each widget gets a unique ID (uuid) assigned on its initial creation. This uuid is used to identify the widget when it is integrated into a website.&lt;br /&gt;
&lt;br /&gt;
In case of a sidebar widget, the agent&#039;s card will be displayed by default depending on its status(availability) unless you checked &amp;quot;Always show widget&amp;quot; under the sidebar settings.&lt;br /&gt;
&lt;br /&gt;
In case of a business cards widget, the agent card will always be shown, but its availability is depending on its status.&lt;br /&gt;
&lt;br /&gt;
The following settings are possible:&lt;br /&gt;
* Presence*: Display/availability of the card based on the presence status of the agent. Presence available (green), Presence unavailable, busy (red). Usage: Normal agent based on availability.&lt;br /&gt;
* Always online: Permanent display/availability of the card regardless of its presence or busy status. Usage: Multiple consecutive calls to the same destination, an agent with multiple line configuration, a group or waiting queue.&lt;br /&gt;
* Boolean*: Display of the card depending on the true status of a Boolean object.  Usage: Agent, group or waiting queues based on boolean settings.&lt;br /&gt;
* Inactive: Agent card is permanently in the status unavailable (red). Usage: Showing the agent in a business cards widget, but limit the access to the agent for a longer period. (holiday, sick-leave or other reasons)&lt;br /&gt;
(* Important: Presence and boolean status are dependent on the visibility configured on all the monitored objects, eg. agent user objects and monitored boolean objects)&lt;br /&gt;
&lt;br /&gt;
= Integrating Widgets into Website =&lt;br /&gt;
Now it is the website admin&#039;s turn to integrate the widget into the website.&amp;lt;br&amp;gt;&lt;br /&gt;
To do this, click the [Code] button in the Widgets App at that widget you want to include. A popup appears showing a handful of code lines (HTML and Javascript).&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Widget-code-popup.png|thumb|Code Popup]]&lt;br /&gt;
You can &#039;&#039;copy&#039;&#039; the code lines into clipboard by clicking the [Copy] button.&amp;lt;br&amp;gt;&lt;br /&gt;
You can &#039;&#039;paste&#039;&#039; the code lines from clipboard into your website code.&amp;lt;br&amp;gt;&lt;br /&gt;
There&#039;s also a [Download] button. When clicking this button a small HTML file is saved on your local computer. This HTML file can be opened in a browser to preview the widget and test the widget&#039;s functionality.&lt;br /&gt;
&lt;br /&gt;
== Content-Security-Policy ==&lt;br /&gt;
If the website uses Content-Security-Policy (CSP) it could be necessary to add entries to config sections &#039;default-src&#039; and &#039;img-src&#039;.&lt;br /&gt;
* The Widget opens a secure websocket connection (wss:)&lt;br /&gt;
* The Widget loads images via Data-URL (data:).&lt;br /&gt;
* The Widget uses Mail-Links (mailto:).&lt;br /&gt;
* The Widget uses Tel-Links (tel:).&lt;br /&gt;
  &amp;lt;meta&lt;br /&gt;
    http-equiv=&amp;quot;Content-Security-Policy&amp;quot; content=&amp;quot;&lt;br /&gt;
      default-src &#039;self&#039; &#039;&#039;&#039;wss://*.innovaphone.com&#039;&#039;&#039;; child-src &#039;self&#039; &#039;&#039;&#039;mailto:&#039;&#039;&#039; &#039;&#039;&#039;tel:&#039;&#039;&#039;; img-src &#039;&#039;&#039;data:&#039;&#039;&#039;&amp;quot;&lt;br /&gt;
  /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= After Integration =&lt;br /&gt;
Once your widget is live on the website you can still change and update the widget in the Widgets-App. You can update the list of agents or change any other attribute. As soon as you click the widget&#039;s [Save] button any open widget instance in a web browser will update immmediately. No need for the website administrator to update the code.&lt;br /&gt;
&lt;br /&gt;
= Widget-API — Protocol between Website Widget and App Service =&lt;br /&gt;
Basically, this section does not matter. To create and use widgets, knowledge about the protocol is not required.&amp;lt;br&amp;gt;&lt;br /&gt;
All who are interested in technical details are welcome to read on.&lt;br /&gt;
&lt;br /&gt;
== Loading the Widget ==&lt;br /&gt;
&lt;br /&gt;
When a widget is loaded in the browser window of the website visitor, a websocket connection is opened to the app service on the innovaphone Application Platform. Once the websocket connection is established it goes like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[1] {&amp;quot;mt&amp;quot;:&amp;quot;Start&amp;quot;,&amp;quot;uuid&amp;quot;:&amp;quot;fadc5da4cae94bfc9434d9957ea08ccb&amp;quot;}&lt;br /&gt;
[2] {&amp;quot;mt&amp;quot;:&amp;quot;Session&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Visitenkarten&amp;quot;,&amp;quot;lang&amp;quot;:&amp;quot;de&amp;quot;,&amp;quot;strings&amp;quot;:{...}}&lt;br /&gt;
[3] {&amp;quot;mt&amp;quot;:&amp;quot;Info&amp;quot;,&amp;quot;id&amp;quot;:&amp;quot;atlantis&amp;quot;,&amp;quot;dn&amp;quot;:&amp;quot;Atlantis&amp;quot;,&amp;quot;department&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;phonenumber&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;email&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;company&amp;quot;:{},&amp;quot;presence&amp;quot;:&amp;quot;online&amp;quot;,&amp;quot;media&amp;quot;:[&amp;quot;voice&amp;quot;,&amp;quot;video&amp;quot;,&amp;quot;email&amp;quot;,&amp;quot;chat&amp;quot;],&amp;quot;order&amp;quot;:0}&lt;br /&gt;
[4] {&amp;quot;mt&amp;quot;:&amp;quot;GetPicture&amp;quot;,&amp;quot;id&amp;quot;:&amp;quot;atlantis&amp;quot;}&lt;br /&gt;
[5] {&amp;quot;mt&amp;quot;:&amp;quot;Info&amp;quot;,&amp;quot;id&amp;quot;:&amp;quot;columbia&amp;quot;,&amp;quot;dn&amp;quot;:&amp;quot;Columbia&amp;quot;,&amp;quot;department&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;phonenumber&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;email&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;company&amp;quot;:{},&amp;quot;presence&amp;quot;:&amp;quot;offline&amp;quot;,&amp;quot;media&amp;quot;:[&amp;quot;voice&amp;quot;,&amp;quot;video&amp;quot;,&amp;quot;email&amp;quot;,&amp;quot;chat&amp;quot;],&amp;quot;order&amp;quot;:1}&lt;br /&gt;
[6] {&amp;quot;mt&amp;quot;:&amp;quot;GetPicture&amp;quot;,&amp;quot;id&amp;quot;:&amp;quot;columbia&amp;quot;}&lt;br /&gt;
[7] {&amp;quot;mt&amp;quot;:&amp;quot;IceConfig&amp;quot;,&amp;quot;stun&amp;quot;:&amp;quot;stun.innovaphone.com&amp;quot;,&amp;quot;turn&amp;quot;:&amp;quot;turn.innovaphone.com&amp;quot;}&lt;br /&gt;
[8] {&amp;quot;mt&amp;quot;:&amp;quot;Picture&amp;quot;,&amp;quot;id&amp;quot;:&amp;quot;atlantis&amp;quot;,&amp;quot;url&amp;quot;:&amp;quot;data:image/jpeg;base64...&amp;quot;}&lt;br /&gt;
[9] {&amp;quot;mt&amp;quot;:&amp;quot;Picture&amp;quot;,&amp;quot;id&amp;quot;:&amp;quot;columbia&amp;quot;,&amp;quot;url&amp;quot;:&amp;quot;data:image/jpeg;base64...&amp;quot;}&lt;br /&gt;
[10] {&amp;quot;mt&amp;quot;:&amp;quot;Info&amp;quot;,&amp;quot;id&amp;quot;:&amp;quot;atlantis&amp;quot;,&amp;quot;dn&amp;quot;:&amp;quot;Atlantis&amp;quot;,&amp;quot;department&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;phonenumber&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;email&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;company&amp;quot;:{},&amp;quot;presence&amp;quot;:&amp;quot;offline&amp;quot;,&amp;quot;media&amp;quot;:[&amp;quot;voice&amp;quot;,&amp;quot;video&amp;quot;,&amp;quot;email&amp;quot;,&amp;quot;chat&amp;quot;],&amp;quot;order&amp;quot;:0}&lt;br /&gt;
[11] {&amp;quot;mt&amp;quot;:&amp;quot;Info&amp;quot;,&amp;quot;id&amp;quot;:&amp;quot;atlantis&amp;quot;,&amp;quot;dn&amp;quot;:&amp;quot;Atlantis&amp;quot;,&amp;quot;department&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;phonenumber&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;email&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;company&amp;quot;:{},&amp;quot;presence&amp;quot;:&amp;quot;online&amp;quot;,&amp;quot;media&amp;quot;:[&amp;quot;voice&amp;quot;,&amp;quot;video&amp;quot;,&amp;quot;email&amp;quot;,&amp;quot;chat&amp;quot;],&amp;quot;order&amp;quot;:0}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[1] The &amp;quot;Start&amp;quot; request is sent with the unique id of the widget.&amp;lt;br&amp;gt;&lt;br /&gt;
[2] The app service sends the &amp;quot;Session&amp;quot; response providing the widget&#039;s display-name and other parameters.&amp;lt;br&amp;gt;&lt;br /&gt;
[3]-[6] The app service sends &amp;quot;Info&amp;quot; messages for all configured agents. Each &amp;quot;Info&amp;quot; message triggers a &amp;quot;GetPicture&amp;quot; request to get a picture of the agent.&amp;lt;br&amp;gt;&lt;br /&gt;
[7] The app service sends &amp;quot;IceConfig&amp;quot; providing the STUN and TURN config required for media calls.&amp;lt;br&amp;gt;&lt;br /&gt;
[8]-[9] The app service sends &amp;quot;Picture&amp;quot; messages for all agents.&amp;lt;br&amp;gt;&lt;br /&gt;
[10]-[11] The presence of an agent may change over time. Presence updates are provided with &amp;quot;Info&amp;quot; messages.&lt;br /&gt;
&lt;br /&gt;
== Initiating a call ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[1] {&amp;quot;mt&amp;quot;:&amp;quot;CreateCall&amp;quot;,&amp;quot;dest&amp;quot;:&amp;quot;atlantis&amp;quot;,&amp;quot;dn&amp;quot;:&amp;quot;Mein Name&amp;quot;}&lt;br /&gt;
[2] {&amp;quot;mt&amp;quot;:&amp;quot;Channels&amp;quot;,&amp;quot;cmd&amp;quot;:&amp;quot;PROPOSAL&amp;quot;,&amp;quot;sdp&amp;quot;:&amp;quot;...&amp;quot;}&lt;br /&gt;
[3] {&amp;quot;mt&amp;quot;:&amp;quot;CallInfo&amp;quot;,&amp;quot;state&amp;quot;:&amp;quot;alerting&amp;quot;}&lt;br /&gt;
[4] {&amp;quot;mt&amp;quot;:&amp;quot;CallInfo&amp;quot;,&amp;quot;state&amp;quot;:&amp;quot;connected&amp;quot;,&amp;quot;cmd&amp;quot;:&amp;quot;SELECT&amp;quot;,&amp;quot;sdp&amp;quot;:&amp;quot;...&amp;quot;}&lt;br /&gt;
[5] {&amp;quot;mt&amp;quot;:&amp;quot;ClearCall&amp;quot;}&lt;br /&gt;
[6] {&amp;quot;mt&amp;quot;:&amp;quot;CallInfo&amp;quot;,&amp;quot;state&amp;quot;:&amp;quot;terminated&amp;quot;}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[1] &amp;quot;CreatCall&amp;quot; message sets the target of the call (&#039;dest&#039;) and the own display name (&#039;dn&#039;).&amp;lt;br&amp;gt;&lt;br /&gt;
[2] &amp;quot;Channels&amp;quot; message provides the media offer for this call. Complete SDP offer is provided.&amp;lt;br&amp;gt;&lt;br /&gt;
[3] &amp;quot;CallInfo&amp;quot; is received giving information about the call&#039;s current state.&amp;lt;br&amp;gt;&lt;br /&gt;
[4] Next &amp;quot;CallInfo&amp;quot; is received telling the call was answered and deliviering the remote side&#039;s media answer.&amp;lt;br&amp;gt;&lt;br /&gt;
[5] Web site user terminates the call.&amp;lt;br&amp;gt;&lt;br /&gt;
[6] The final &amp;quot;CallInfo&amp;quot; message is received.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Troubleshooting =&lt;br /&gt;
&amp;lt;big&amp;gt;If an issue can be reproduced&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;*Web visitor in a browser.&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
The myApps web uses the logging facilities provided by the browser it runs in (i.e. JavaScript function &amp;lt;code&amp;gt;console.log&amp;lt;/code&amp;gt;).  In most browser this is available as &#039;&#039;Console&#039;&#039; after pressing F12.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;*The called agent working with myApps client.&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
The myApps platform services provide more elaborate tracing mechanisms. See &#039;&#039;Troubleshooting&#039;&#039; in [[Reference14r1:Concept_myApps_platform_services#Troubleshooting|Concept myApps platform services]].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;*Troubleshooting AP Services on the AP.&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
Troubleshooting a specific App instance on the AP [[Course13:IT_Plus_-_Tools_for_Troubleshooting#App_Service_Logs|Course13:IT_Plus_-_Tools_for_Troubleshooting#App_Service_Logs]]&lt;br /&gt;
&lt;br /&gt;
Go to the AP Manager and select the App instance from the Contact Widgets App. &lt;br /&gt;
Click on Diagnose and make sure that the box App is ticked. &lt;br /&gt;
[[File:AP-Diagnostics.png|thumb|none|AP-Diagnostics]]&lt;br /&gt;
Make sure that the logging of the App instance has been activated.&lt;br /&gt;
[[File:AP-DiagnosticsLogging.png|thumb|none|AP-Diagnostics-Logging]]&lt;br /&gt;
= Related Articles =&lt;br /&gt;
[[Howto14r1:Install_Contact_Widget_App|Howto14r1:Install_Contact_Widget_App]]&lt;/div&gt;</summary>
		<author><name>Npa</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Reference14r1:Concept_Contact_Widgets&amp;diff=70921</id>
		<title>Reference14r1:Concept Contact Widgets</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Reference14r1:Concept_Contact_Widgets&amp;diff=70921"/>
		<updated>2024-02-22T12:09:28Z</updated>

		<summary type="html">&lt;p&gt;Npa: /* Using the Contact Widgets App */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Concept|Conference]]&lt;br /&gt;
&lt;br /&gt;
= Applies To =&lt;br /&gt;
* innovaphone PBX from version 14r1&lt;br /&gt;
* innovaphone Application Platform&lt;br /&gt;
&lt;br /&gt;
= Requirements =&lt;br /&gt;
* innovaphone PBX&lt;br /&gt;
* innovaphone Application Platform&lt;br /&gt;
* Firmware Version 14r1&lt;br /&gt;
* One &#039;&#039;&#039;Port License&#039;&#039;&#039; is used by the app service to establish a VoIP registration at the PBX&lt;br /&gt;
* &#039;&#039;&#039;Video License&#039;&#039;&#039; (optional) is required to establish video connections [*]&lt;br /&gt;
* &#039;&#039;&#039;Widget License&#039;&#039;&#039; (optional) is required to remove any &#039;innovaphone&#039; branding from the Widget UI&lt;br /&gt;
&lt;br /&gt;
[*] &#039;&#039;&#039;UC License&#039;&#039;&#039; can also be used since it includes a &#039;&#039;&#039;Video License&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= What is a Contact Widget? =&lt;br /&gt;
A Contact Widget (or Website Widget) is an element that can be added to a website. It offers to website visitors a way to get in contact with agents (e.g. help-desk). Website visitors can start chat sessions (asking questions, getting answers) or can start voice or even video calls.&lt;br /&gt;
&lt;br /&gt;
An nice example for a &amp;quot;Sidebar Widget&amp;quot; can be viewed [https://www.innovaphone.com/de/ip-telefonie/innovaphone-pbx.html here].&amp;lt;br&amp;gt;&lt;br /&gt;
When you have opened this website the Sidebar Widget comes slowly into view on the right side.&lt;br /&gt;
&lt;br /&gt;
Example of a Business-Cards-Widget:&lt;br /&gt;
&lt;br /&gt;
[[File:Cardset-widget.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example of a Sidebar-Widget:&lt;br /&gt;
&lt;br /&gt;
[[File:Sidebar-Widget.png]]&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
[[File:Concept-widgets-overview.png|thumb|Overview]]&lt;br /&gt;
The central part of the new Widgets-Concept is the &#039;&#039;&#039;Contact-Widgets-App&#039;&#039;&#039;.&lt;br /&gt;
The Contact Widgets App is installed on the innovaphone Application Platform and it allows a PBX user to define Contact Widgets.&lt;br /&gt;
&lt;br /&gt;
Contact Widgets can be integrated in a Website to offer easy ways to website users to contact &#039;&#039;&#039;Agents&#039;&#039;&#039;. Agents are PBX users meant to communicate with external clients.&amp;lt;br&amp;gt;&lt;br /&gt;
There are 2 fundamental types of Contact Widgets:&lt;br /&gt;
* &#039;&#039;&#039;Sidebar Widgets&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Business Cards Widgets&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A Sidebar Widget appears one side of the website trying to take as less space as possible. The website visitor can expand the Sidebar Widget if interested.&amp;lt;br&amp;gt;&lt;br /&gt;
A Business Cards Widget appears as integrated part of the website content, offering one (or more) contacts in form of ordinary business cards.&lt;br /&gt;
&lt;br /&gt;
= Configuration =&lt;br /&gt;
For non experienced technicians have a look at [[Howto14r1:Install_Contact_Widget_App#Installation]] and follow the installation steps mentioned in the how-to article.&lt;br /&gt;
&lt;br /&gt;
Others:&lt;br /&gt;
* Download the &#039;Contact Widgets App&#039; via App Store.&lt;br /&gt;
* Install the App on the App Platform Manager.&lt;br /&gt;
* Create an instance for the Widgets App on the Manager. We recommend to use no capital letters and no special characters (also not such as space).&lt;br /&gt;
* Create a new PBX Object with the PBX Manager Plugin. (*)&lt;br /&gt;
* Assign App to authorized (admin) users, which will be allowed to create/change/delete Contact Widgets.&lt;br /&gt;
&lt;br /&gt;
Experts:&lt;br /&gt;
(*) You can also create the PBX Object manually:&amp;lt;br&amp;gt;&lt;br /&gt;
* Create a new object of type &amp;quot;App&amp;quot;.&lt;br /&gt;
* Give it a &amp;quot;Long Name&amp;quot; (&amp;quot;Contact Widgets&amp;quot;) and a Name (&amp;quot;widgets&amp;quot;) same as the instance-name.&lt;br /&gt;
* Give it a password, same as the instance password.&lt;br /&gt;
* On the &amp;quot;App&amp;quot; tab configure URL to App Service on App Platform (&amp;quot;http://&amp;lt;ipaddress-or-dnsname&amp;gt;/&amp;lt;instance-name&amp;gt;/innovaphone-widgets&amp;quot;).&lt;br /&gt;
* Activate option &amp;quot;Websocket&amp;quot;&lt;br /&gt;
* Grant access to APIs: &amp;quot;PbxSignal&amp;quot; (mandatory), &amp;quot;Admin&amp;quot; (optional) and &amp;quot;PbxApi&amp;quot; (mandatory)&lt;br /&gt;
&lt;br /&gt;
= Using the Contact Widgets App =&lt;br /&gt;
Click on one of the buttons (depending on what type of widget you want to create):&lt;br /&gt;
* [+ Add new sidebar widget]&lt;br /&gt;
* [+ Add new business cards widget]&lt;br /&gt;
A new (empty) widget is displayed. You can give the widget a name by clicking the pen-symbol. The widget name helps to identify widgets as soon the number of widgets starts to grow.&amp;lt;br&amp;gt;&lt;br /&gt;
You can expand and collaps widgets by clicking the header of each widget.&lt;br /&gt;
[[Image:Widget-code-new-widget.png|thumb|New Widget]]&lt;br /&gt;
&lt;br /&gt;
== Creating a new Widget ==&lt;br /&gt;
&lt;br /&gt;
New Widget features and options&lt;br /&gt;
&lt;br /&gt;
*You can add the main contact details for this widget&lt;br /&gt;
*Select the default language&lt;br /&gt;
*Set your prefered font settings&lt;br /&gt;
*Change the colour settings&lt;br /&gt;
*Change the margin settings&lt;br /&gt;
*z-index&lt;br /&gt;
&lt;br /&gt;
[[Image:Widget-new-widget-features.png|thumb|Widget Features]]&lt;br /&gt;
&lt;br /&gt;
== Adding Agent to Widget ==&lt;br /&gt;
You can add and remove Agents to a Widget. Agents can be contacted by external website visitors.&amp;lt;br&amp;gt;&lt;br /&gt;
New agents are added by clicking the [+] button inside the agents container.&lt;br /&gt;
[[File:Adding-new-agents.png|thumb|Adding agents]]&lt;br /&gt;
A dialog opens where you can define the agent. It all starts with the agent&#039;s &#039;SIP-ID&#039;. That&#039;s the dialable PBX user address. You can use the search function to find a PBX user by name.&lt;br /&gt;
&lt;br /&gt;
There are several (optional) attributes you can set for an agent, like &#039;Display name&#039;, &#039;Phone number&#039;, &#039;Email address&#039; and &#039;Picture&#039;. A picture can be placed by drag &amp;amp; drop or can be selected from local disk by clicking the placeholder rectangle.&lt;br /&gt;
&lt;br /&gt;
Finally you can define the ways of communication the agent is available for:&lt;br /&gt;
* Voice-only calls&lt;br /&gt;
* Video calls (including voice)&lt;br /&gt;
* Chat&lt;br /&gt;
* Email&lt;br /&gt;
&lt;br /&gt;
For a Cardset-Widget the order of agents could be relevant. You can change the order of agents in the Widgets-App by easy drag &amp;amp; drop using the mouse.&lt;br /&gt;
&lt;br /&gt;
Each widget gets a unique ID (uuid) assigned on its initial creation. This uuid is used to identify the widget when it is integrated into a website.&lt;br /&gt;
&lt;br /&gt;
In case of a sidebar widget, the agent&#039;s card will be displayed by default depending on its status(availability) unless you checked &amp;quot;Always show widget&amp;quot; under the sidebar settings.&lt;br /&gt;
&lt;br /&gt;
In case of a cardset widget, the agent card will always be shown, but its availability is depending on its status.&lt;br /&gt;
&lt;br /&gt;
The following settings are possible:&lt;br /&gt;
* Presence*: Display/availability of the card based on the presence status of the agent. Presence available (green), Presence unavailable, busy (red). Usage: Normal agent based on availability.&lt;br /&gt;
* Always online: Permanent display/availability of the card regardless of its presence or busy status. Usage: Multiple consecutive calls to the same destination, an agent with multiple line configuration, a group or waiting queue.&lt;br /&gt;
* Boolean*: Display of the card depending on the true status of a Boolean object.  Usage: Agent, group or waiting queues based on boolean settings.&lt;br /&gt;
* Inactive: Agent card is permanently in the status unavailable (red). Usage: Showing the agent in a cardset, but limit the access to the agent for a longer period. (holiday, sick-leave or other reasons)&lt;br /&gt;
(* Important: Presence and boolean status are dependent on the visibility configured on all the monitored objects, eg. agent user objects and monitored boolean objects)&lt;br /&gt;
&lt;br /&gt;
= Integrating Widgets into Website =&lt;br /&gt;
Now it is the website admin&#039;s turn to integrate the widget into the website.&amp;lt;br&amp;gt;&lt;br /&gt;
To do this, click the [Code] button in the Widgets App at that widget you want to include. A popup appears showing a handful of code lines (HTML and Javascript).&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Widget-code-popup.png|thumb|Code Popup]]&lt;br /&gt;
You can &#039;&#039;copy&#039;&#039; the code lines into clipboard by clicking the [Copy] button.&amp;lt;br&amp;gt;&lt;br /&gt;
You can &#039;&#039;paste&#039;&#039; the code lines from clipboard into your website code.&amp;lt;br&amp;gt;&lt;br /&gt;
There&#039;s also a [Download] button. When clicking this button a small HTML file is saved on your local computer. This HTML file can be opened in a browser to preview the widget and test the widget&#039;s functionality.&lt;br /&gt;
&lt;br /&gt;
== Content-Security-Policy ==&lt;br /&gt;
If the website uses Content-Security-Policy (CSP) it could be necessary to add entries to config sections &#039;default-src&#039; and &#039;img-src&#039;.&lt;br /&gt;
* The Widget opens a secure websocket connection (wss:)&lt;br /&gt;
* The Widget loads images via Data-URL (data:).&lt;br /&gt;
* The Widget uses Mail-Links (mailto:).&lt;br /&gt;
* The Widget uses Tel-Links (tel:).&lt;br /&gt;
  &amp;lt;meta&lt;br /&gt;
    http-equiv=&amp;quot;Content-Security-Policy&amp;quot; content=&amp;quot;&lt;br /&gt;
      default-src &#039;self&#039; &#039;&#039;&#039;wss://*.innovaphone.com&#039;&#039;&#039;; child-src &#039;self&#039; &#039;&#039;&#039;mailto:&#039;&#039;&#039; &#039;&#039;&#039;tel:&#039;&#039;&#039;; img-src &#039;&#039;&#039;data:&#039;&#039;&#039;&amp;quot;&lt;br /&gt;
  /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= After Integration =&lt;br /&gt;
Once your widget is live on the website you can still change and update the widget in the Widgets-App. You can update the list of agents or change any other attribute. As soon as you click the widget&#039;s [Save] button any open widget instance in a web browser will update immmediately. No need for the website administrator to update the code.&lt;br /&gt;
&lt;br /&gt;
= Widget-API — Protocol between Website Widget and App Service =&lt;br /&gt;
Basically, this section does not matter. To create and use widgets, knowledge about the protocol is not required.&amp;lt;br&amp;gt;&lt;br /&gt;
All who are interested in technical details are welcome to read on.&lt;br /&gt;
&lt;br /&gt;
== Loading the Widget ==&lt;br /&gt;
&lt;br /&gt;
When a widget is loaded in the browser window of the website visitor, a websocket connection is opened to the app service on the innovaphone Application Platform. Once the websocket connection is established it goes like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[1] {&amp;quot;mt&amp;quot;:&amp;quot;Start&amp;quot;,&amp;quot;uuid&amp;quot;:&amp;quot;fadc5da4cae94bfc9434d9957ea08ccb&amp;quot;}&lt;br /&gt;
[2] {&amp;quot;mt&amp;quot;:&amp;quot;Session&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Visitenkarten&amp;quot;,&amp;quot;lang&amp;quot;:&amp;quot;de&amp;quot;,&amp;quot;strings&amp;quot;:{...}}&lt;br /&gt;
[3] {&amp;quot;mt&amp;quot;:&amp;quot;Info&amp;quot;,&amp;quot;id&amp;quot;:&amp;quot;atlantis&amp;quot;,&amp;quot;dn&amp;quot;:&amp;quot;Atlantis&amp;quot;,&amp;quot;department&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;phonenumber&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;email&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;company&amp;quot;:{},&amp;quot;presence&amp;quot;:&amp;quot;online&amp;quot;,&amp;quot;media&amp;quot;:[&amp;quot;voice&amp;quot;,&amp;quot;video&amp;quot;,&amp;quot;email&amp;quot;,&amp;quot;chat&amp;quot;],&amp;quot;order&amp;quot;:0}&lt;br /&gt;
[4] {&amp;quot;mt&amp;quot;:&amp;quot;GetPicture&amp;quot;,&amp;quot;id&amp;quot;:&amp;quot;atlantis&amp;quot;}&lt;br /&gt;
[5] {&amp;quot;mt&amp;quot;:&amp;quot;Info&amp;quot;,&amp;quot;id&amp;quot;:&amp;quot;columbia&amp;quot;,&amp;quot;dn&amp;quot;:&amp;quot;Columbia&amp;quot;,&amp;quot;department&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;phonenumber&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;email&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;company&amp;quot;:{},&amp;quot;presence&amp;quot;:&amp;quot;offline&amp;quot;,&amp;quot;media&amp;quot;:[&amp;quot;voice&amp;quot;,&amp;quot;video&amp;quot;,&amp;quot;email&amp;quot;,&amp;quot;chat&amp;quot;],&amp;quot;order&amp;quot;:1}&lt;br /&gt;
[6] {&amp;quot;mt&amp;quot;:&amp;quot;GetPicture&amp;quot;,&amp;quot;id&amp;quot;:&amp;quot;columbia&amp;quot;}&lt;br /&gt;
[7] {&amp;quot;mt&amp;quot;:&amp;quot;IceConfig&amp;quot;,&amp;quot;stun&amp;quot;:&amp;quot;stun.innovaphone.com&amp;quot;,&amp;quot;turn&amp;quot;:&amp;quot;turn.innovaphone.com&amp;quot;}&lt;br /&gt;
[8] {&amp;quot;mt&amp;quot;:&amp;quot;Picture&amp;quot;,&amp;quot;id&amp;quot;:&amp;quot;atlantis&amp;quot;,&amp;quot;url&amp;quot;:&amp;quot;data:image/jpeg;base64...&amp;quot;}&lt;br /&gt;
[9] {&amp;quot;mt&amp;quot;:&amp;quot;Picture&amp;quot;,&amp;quot;id&amp;quot;:&amp;quot;columbia&amp;quot;,&amp;quot;url&amp;quot;:&amp;quot;data:image/jpeg;base64...&amp;quot;}&lt;br /&gt;
[10] {&amp;quot;mt&amp;quot;:&amp;quot;Info&amp;quot;,&amp;quot;id&amp;quot;:&amp;quot;atlantis&amp;quot;,&amp;quot;dn&amp;quot;:&amp;quot;Atlantis&amp;quot;,&amp;quot;department&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;phonenumber&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;email&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;company&amp;quot;:{},&amp;quot;presence&amp;quot;:&amp;quot;offline&amp;quot;,&amp;quot;media&amp;quot;:[&amp;quot;voice&amp;quot;,&amp;quot;video&amp;quot;,&amp;quot;email&amp;quot;,&amp;quot;chat&amp;quot;],&amp;quot;order&amp;quot;:0}&lt;br /&gt;
[11] {&amp;quot;mt&amp;quot;:&amp;quot;Info&amp;quot;,&amp;quot;id&amp;quot;:&amp;quot;atlantis&amp;quot;,&amp;quot;dn&amp;quot;:&amp;quot;Atlantis&amp;quot;,&amp;quot;department&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;phonenumber&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;email&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;company&amp;quot;:{},&amp;quot;presence&amp;quot;:&amp;quot;online&amp;quot;,&amp;quot;media&amp;quot;:[&amp;quot;voice&amp;quot;,&amp;quot;video&amp;quot;,&amp;quot;email&amp;quot;,&amp;quot;chat&amp;quot;],&amp;quot;order&amp;quot;:0}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[1] The &amp;quot;Start&amp;quot; request is sent with the unique id of the widget.&amp;lt;br&amp;gt;&lt;br /&gt;
[2] The app service sends the &amp;quot;Session&amp;quot; response providing the widget&#039;s display-name and other parameters.&amp;lt;br&amp;gt;&lt;br /&gt;
[3]-[6] The app service sends &amp;quot;Info&amp;quot; messages for all configured agents. Each &amp;quot;Info&amp;quot; message triggers a &amp;quot;GetPicture&amp;quot; request to get a picture of the agent.&amp;lt;br&amp;gt;&lt;br /&gt;
[7] The app service sends &amp;quot;IceConfig&amp;quot; providing the STUN and TURN config required for media calls.&amp;lt;br&amp;gt;&lt;br /&gt;
[8]-[9] The app service sends &amp;quot;Picture&amp;quot; messages for all agents.&amp;lt;br&amp;gt;&lt;br /&gt;
[10]-[11] The presence of an agent may change over time. Presence updates are provided with &amp;quot;Info&amp;quot; messages.&lt;br /&gt;
&lt;br /&gt;
== Initiating a call ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[1] {&amp;quot;mt&amp;quot;:&amp;quot;CreateCall&amp;quot;,&amp;quot;dest&amp;quot;:&amp;quot;atlantis&amp;quot;,&amp;quot;dn&amp;quot;:&amp;quot;Mein Name&amp;quot;}&lt;br /&gt;
[2] {&amp;quot;mt&amp;quot;:&amp;quot;Channels&amp;quot;,&amp;quot;cmd&amp;quot;:&amp;quot;PROPOSAL&amp;quot;,&amp;quot;sdp&amp;quot;:&amp;quot;...&amp;quot;}&lt;br /&gt;
[3] {&amp;quot;mt&amp;quot;:&amp;quot;CallInfo&amp;quot;,&amp;quot;state&amp;quot;:&amp;quot;alerting&amp;quot;}&lt;br /&gt;
[4] {&amp;quot;mt&amp;quot;:&amp;quot;CallInfo&amp;quot;,&amp;quot;state&amp;quot;:&amp;quot;connected&amp;quot;,&amp;quot;cmd&amp;quot;:&amp;quot;SELECT&amp;quot;,&amp;quot;sdp&amp;quot;:&amp;quot;...&amp;quot;}&lt;br /&gt;
[5] {&amp;quot;mt&amp;quot;:&amp;quot;ClearCall&amp;quot;}&lt;br /&gt;
[6] {&amp;quot;mt&amp;quot;:&amp;quot;CallInfo&amp;quot;,&amp;quot;state&amp;quot;:&amp;quot;terminated&amp;quot;}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[1] &amp;quot;CreatCall&amp;quot; message sets the target of the call (&#039;dest&#039;) and the own display name (&#039;dn&#039;).&amp;lt;br&amp;gt;&lt;br /&gt;
[2] &amp;quot;Channels&amp;quot; message provides the media offer for this call. Complete SDP offer is provided.&amp;lt;br&amp;gt;&lt;br /&gt;
[3] &amp;quot;CallInfo&amp;quot; is received giving information about the call&#039;s current state.&amp;lt;br&amp;gt;&lt;br /&gt;
[4] Next &amp;quot;CallInfo&amp;quot; is received telling the call was answered and deliviering the remote side&#039;s media answer.&amp;lt;br&amp;gt;&lt;br /&gt;
[5] Web site user terminates the call.&amp;lt;br&amp;gt;&lt;br /&gt;
[6] The final &amp;quot;CallInfo&amp;quot; message is received.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Troubleshooting =&lt;br /&gt;
&amp;lt;big&amp;gt;If an issue can be reproduced&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;*Web visitor in a browser.&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
The myApps web uses the logging facilities provided by the browser it runs in (i.e. JavaScript function &amp;lt;code&amp;gt;console.log&amp;lt;/code&amp;gt;).  In most browser this is available as &#039;&#039;Console&#039;&#039; after pressing F12.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;*The called agent working with myApps client.&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
The myApps platform services provide more elaborate tracing mechanisms. See &#039;&#039;Troubleshooting&#039;&#039; in [[Reference14r1:Concept_myApps_platform_services#Troubleshooting|Concept myApps platform services]].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;*Troubleshooting AP Services on the AP.&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
Troubleshooting a specific App instance on the AP [[Course13:IT_Plus_-_Tools_for_Troubleshooting#App_Service_Logs|Course13:IT_Plus_-_Tools_for_Troubleshooting#App_Service_Logs]]&lt;br /&gt;
&lt;br /&gt;
Go to the AP Manager and select the App instance from the Contact Widgets App. &lt;br /&gt;
Click on Diagnose and make sure that the box App is ticked. &lt;br /&gt;
[[File:AP-Diagnostics.png|thumb|none|AP-Diagnostics]]&lt;br /&gt;
Make sure that the logging of the App instance has been activated.&lt;br /&gt;
[[File:AP-DiagnosticsLogging.png|thumb|none|AP-Diagnostics-Logging]]&lt;br /&gt;
= Related Articles =&lt;br /&gt;
[[Howto14r1:Install_Contact_Widget_App|Howto14r1:Install_Contact_Widget_App]]&lt;/div&gt;</summary>
		<author><name>Npa</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Reference14r1:Concept_Contact_Widgets&amp;diff=70920</id>
		<title>Reference14r1:Concept Contact Widgets</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Reference14r1:Concept_Contact_Widgets&amp;diff=70920"/>
		<updated>2024-02-22T12:08:58Z</updated>

		<summary type="html">&lt;p&gt;Npa: /* Overview */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Concept|Conference]]&lt;br /&gt;
&lt;br /&gt;
= Applies To =&lt;br /&gt;
* innovaphone PBX from version 14r1&lt;br /&gt;
* innovaphone Application Platform&lt;br /&gt;
&lt;br /&gt;
= Requirements =&lt;br /&gt;
* innovaphone PBX&lt;br /&gt;
* innovaphone Application Platform&lt;br /&gt;
* Firmware Version 14r1&lt;br /&gt;
* One &#039;&#039;&#039;Port License&#039;&#039;&#039; is used by the app service to establish a VoIP registration at the PBX&lt;br /&gt;
* &#039;&#039;&#039;Video License&#039;&#039;&#039; (optional) is required to establish video connections [*]&lt;br /&gt;
* &#039;&#039;&#039;Widget License&#039;&#039;&#039; (optional) is required to remove any &#039;innovaphone&#039; branding from the Widget UI&lt;br /&gt;
&lt;br /&gt;
[*] &#039;&#039;&#039;UC License&#039;&#039;&#039; can also be used since it includes a &#039;&#039;&#039;Video License&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= What is a Contact Widget? =&lt;br /&gt;
A Contact Widget (or Website Widget) is an element that can be added to a website. It offers to website visitors a way to get in contact with agents (e.g. help-desk). Website visitors can start chat sessions (asking questions, getting answers) or can start voice or even video calls.&lt;br /&gt;
&lt;br /&gt;
An nice example for a &amp;quot;Sidebar Widget&amp;quot; can be viewed [https://www.innovaphone.com/de/ip-telefonie/innovaphone-pbx.html here].&amp;lt;br&amp;gt;&lt;br /&gt;
When you have opened this website the Sidebar Widget comes slowly into view on the right side.&lt;br /&gt;
&lt;br /&gt;
Example of a Business-Cards-Widget:&lt;br /&gt;
&lt;br /&gt;
[[File:Cardset-widget.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example of a Sidebar-Widget:&lt;br /&gt;
&lt;br /&gt;
[[File:Sidebar-Widget.png]]&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
[[File:Concept-widgets-overview.png|thumb|Overview]]&lt;br /&gt;
The central part of the new Widgets-Concept is the &#039;&#039;&#039;Contact-Widgets-App&#039;&#039;&#039;.&lt;br /&gt;
The Contact Widgets App is installed on the innovaphone Application Platform and it allows a PBX user to define Contact Widgets.&lt;br /&gt;
&lt;br /&gt;
Contact Widgets can be integrated in a Website to offer easy ways to website users to contact &#039;&#039;&#039;Agents&#039;&#039;&#039;. Agents are PBX users meant to communicate with external clients.&amp;lt;br&amp;gt;&lt;br /&gt;
There are 2 fundamental types of Contact Widgets:&lt;br /&gt;
* &#039;&#039;&#039;Sidebar Widgets&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Business Cards Widgets&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A Sidebar Widget appears one side of the website trying to take as less space as possible. The website visitor can expand the Sidebar Widget if interested.&amp;lt;br&amp;gt;&lt;br /&gt;
A Business Cards Widget appears as integrated part of the website content, offering one (or more) contacts in form of ordinary business cards.&lt;br /&gt;
&lt;br /&gt;
= Configuration =&lt;br /&gt;
For non experienced technicians have a look at [[Howto14r1:Install_Contact_Widget_App#Installation]] and follow the installation steps mentioned in the how-to article.&lt;br /&gt;
&lt;br /&gt;
Others:&lt;br /&gt;
* Download the &#039;Contact Widgets App&#039; via App Store.&lt;br /&gt;
* Install the App on the App Platform Manager.&lt;br /&gt;
* Create an instance for the Widgets App on the Manager. We recommend to use no capital letters and no special characters (also not such as space).&lt;br /&gt;
* Create a new PBX Object with the PBX Manager Plugin. (*)&lt;br /&gt;
* Assign App to authorized (admin) users, which will be allowed to create/change/delete Contact Widgets.&lt;br /&gt;
&lt;br /&gt;
Experts:&lt;br /&gt;
(*) You can also create the PBX Object manually:&amp;lt;br&amp;gt;&lt;br /&gt;
* Create a new object of type &amp;quot;App&amp;quot;.&lt;br /&gt;
* Give it a &amp;quot;Long Name&amp;quot; (&amp;quot;Contact Widgets&amp;quot;) and a Name (&amp;quot;widgets&amp;quot;) same as the instance-name.&lt;br /&gt;
* Give it a password, same as the instance password.&lt;br /&gt;
* On the &amp;quot;App&amp;quot; tab configure URL to App Service on App Platform (&amp;quot;http://&amp;lt;ipaddress-or-dnsname&amp;gt;/&amp;lt;instance-name&amp;gt;/innovaphone-widgets&amp;quot;).&lt;br /&gt;
* Activate option &amp;quot;Websocket&amp;quot;&lt;br /&gt;
* Grant access to APIs: &amp;quot;PbxSignal&amp;quot; (mandatory), &amp;quot;Admin&amp;quot; (optional) and &amp;quot;PbxApi&amp;quot; (mandatory)&lt;br /&gt;
&lt;br /&gt;
= Using the Contact Widgets App =&lt;br /&gt;
Click on one of the buttons (depending on what type of widget you want to create):&lt;br /&gt;
* [+ Add new sidebar widget]&lt;br /&gt;
* [+ Add new cardset widget]&lt;br /&gt;
A new (empty) widget is displayed. You can give the widget a name by clicking the pen-symbol. The widget name helps to identify widgets as soon the number of widgets starts to grow.&amp;lt;br&amp;gt;&lt;br /&gt;
You can expand and collaps widgets by clicking the header of each widget.&lt;br /&gt;
[[Image:Widget-code-new-widget.png|thumb|New Widget]]&lt;br /&gt;
&lt;br /&gt;
== Creating a new Widget ==&lt;br /&gt;
&lt;br /&gt;
New Widget features and options&lt;br /&gt;
&lt;br /&gt;
*You can add the main contact details for this widget&lt;br /&gt;
*Select the default language&lt;br /&gt;
*Set your prefered font settings&lt;br /&gt;
*Change the colour settings&lt;br /&gt;
*Change the margin settings&lt;br /&gt;
*z-index&lt;br /&gt;
&lt;br /&gt;
[[Image:Widget-new-widget-features.png|thumb|Widget Features]]&lt;br /&gt;
&lt;br /&gt;
== Adding Agent to Widget ==&lt;br /&gt;
You can add and remove Agents to a Widget. Agents can be contacted by external website visitors.&amp;lt;br&amp;gt;&lt;br /&gt;
New agents are added by clicking the [+] button inside the agents container.&lt;br /&gt;
[[File:Adding-new-agents.png|thumb|Adding agents]]&lt;br /&gt;
A dialog opens where you can define the agent. It all starts with the agent&#039;s &#039;SIP-ID&#039;. That&#039;s the dialable PBX user address. You can use the search function to find a PBX user by name.&lt;br /&gt;
&lt;br /&gt;
There are several (optional) attributes you can set for an agent, like &#039;Display name&#039;, &#039;Phone number&#039;, &#039;Email address&#039; and &#039;Picture&#039;. A picture can be placed by drag &amp;amp; drop or can be selected from local disk by clicking the placeholder rectangle.&lt;br /&gt;
&lt;br /&gt;
Finally you can define the ways of communication the agent is available for:&lt;br /&gt;
* Voice-only calls&lt;br /&gt;
* Video calls (including voice)&lt;br /&gt;
* Chat&lt;br /&gt;
* Email&lt;br /&gt;
&lt;br /&gt;
For a Cardset-Widget the order of agents could be relevant. You can change the order of agents in the Widgets-App by easy drag &amp;amp; drop using the mouse.&lt;br /&gt;
&lt;br /&gt;
Each widget gets a unique ID (uuid) assigned on its initial creation. This uuid is used to identify the widget when it is integrated into a website.&lt;br /&gt;
&lt;br /&gt;
In case of a sidebar widget, the agent&#039;s card will be displayed by default depending on its status(availability) unless you checked &amp;quot;Always show widget&amp;quot; under the sidebar settings.&lt;br /&gt;
&lt;br /&gt;
In case of a cardset widget, the agent card will always be shown, but its availability is depending on its status.&lt;br /&gt;
&lt;br /&gt;
The following settings are possible:&lt;br /&gt;
* Presence*: Display/availability of the card based on the presence status of the agent. Presence available (green), Presence unavailable, busy (red). Usage: Normal agent based on availability.&lt;br /&gt;
* Always online: Permanent display/availability of the card regardless of its presence or busy status. Usage: Multiple consecutive calls to the same destination, an agent with multiple line configuration, a group or waiting queue.&lt;br /&gt;
* Boolean*: Display of the card depending on the true status of a Boolean object.  Usage: Agent, group or waiting queues based on boolean settings.&lt;br /&gt;
* Inactive: Agent card is permanently in the status unavailable (red). Usage: Showing the agent in a cardset, but limit the access to the agent for a longer period. (holiday, sick-leave or other reasons)&lt;br /&gt;
(* Important: Presence and boolean status are dependent on the visibility configured on all the monitored objects, eg. agent user objects and monitored boolean objects)&lt;br /&gt;
&lt;br /&gt;
= Integrating Widgets into Website =&lt;br /&gt;
Now it is the website admin&#039;s turn to integrate the widget into the website.&amp;lt;br&amp;gt;&lt;br /&gt;
To do this, click the [Code] button in the Widgets App at that widget you want to include. A popup appears showing a handful of code lines (HTML and Javascript).&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Widget-code-popup.png|thumb|Code Popup]]&lt;br /&gt;
You can &#039;&#039;copy&#039;&#039; the code lines into clipboard by clicking the [Copy] button.&amp;lt;br&amp;gt;&lt;br /&gt;
You can &#039;&#039;paste&#039;&#039; the code lines from clipboard into your website code.&amp;lt;br&amp;gt;&lt;br /&gt;
There&#039;s also a [Download] button. When clicking this button a small HTML file is saved on your local computer. This HTML file can be opened in a browser to preview the widget and test the widget&#039;s functionality.&lt;br /&gt;
&lt;br /&gt;
== Content-Security-Policy ==&lt;br /&gt;
If the website uses Content-Security-Policy (CSP) it could be necessary to add entries to config sections &#039;default-src&#039; and &#039;img-src&#039;.&lt;br /&gt;
* The Widget opens a secure websocket connection (wss:)&lt;br /&gt;
* The Widget loads images via Data-URL (data:).&lt;br /&gt;
* The Widget uses Mail-Links (mailto:).&lt;br /&gt;
* The Widget uses Tel-Links (tel:).&lt;br /&gt;
  &amp;lt;meta&lt;br /&gt;
    http-equiv=&amp;quot;Content-Security-Policy&amp;quot; content=&amp;quot;&lt;br /&gt;
      default-src &#039;self&#039; &#039;&#039;&#039;wss://*.innovaphone.com&#039;&#039;&#039;; child-src &#039;self&#039; &#039;&#039;&#039;mailto:&#039;&#039;&#039; &#039;&#039;&#039;tel:&#039;&#039;&#039;; img-src &#039;&#039;&#039;data:&#039;&#039;&#039;&amp;quot;&lt;br /&gt;
  /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= After Integration =&lt;br /&gt;
Once your widget is live on the website you can still change and update the widget in the Widgets-App. You can update the list of agents or change any other attribute. As soon as you click the widget&#039;s [Save] button any open widget instance in a web browser will update immmediately. No need for the website administrator to update the code.&lt;br /&gt;
&lt;br /&gt;
= Widget-API — Protocol between Website Widget and App Service =&lt;br /&gt;
Basically, this section does not matter. To create and use widgets, knowledge about the protocol is not required.&amp;lt;br&amp;gt;&lt;br /&gt;
All who are interested in technical details are welcome to read on.&lt;br /&gt;
&lt;br /&gt;
== Loading the Widget ==&lt;br /&gt;
&lt;br /&gt;
When a widget is loaded in the browser window of the website visitor, a websocket connection is opened to the app service on the innovaphone Application Platform. Once the websocket connection is established it goes like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[1] {&amp;quot;mt&amp;quot;:&amp;quot;Start&amp;quot;,&amp;quot;uuid&amp;quot;:&amp;quot;fadc5da4cae94bfc9434d9957ea08ccb&amp;quot;}&lt;br /&gt;
[2] {&amp;quot;mt&amp;quot;:&amp;quot;Session&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Visitenkarten&amp;quot;,&amp;quot;lang&amp;quot;:&amp;quot;de&amp;quot;,&amp;quot;strings&amp;quot;:{...}}&lt;br /&gt;
[3] {&amp;quot;mt&amp;quot;:&amp;quot;Info&amp;quot;,&amp;quot;id&amp;quot;:&amp;quot;atlantis&amp;quot;,&amp;quot;dn&amp;quot;:&amp;quot;Atlantis&amp;quot;,&amp;quot;department&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;phonenumber&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;email&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;company&amp;quot;:{},&amp;quot;presence&amp;quot;:&amp;quot;online&amp;quot;,&amp;quot;media&amp;quot;:[&amp;quot;voice&amp;quot;,&amp;quot;video&amp;quot;,&amp;quot;email&amp;quot;,&amp;quot;chat&amp;quot;],&amp;quot;order&amp;quot;:0}&lt;br /&gt;
[4] {&amp;quot;mt&amp;quot;:&amp;quot;GetPicture&amp;quot;,&amp;quot;id&amp;quot;:&amp;quot;atlantis&amp;quot;}&lt;br /&gt;
[5] {&amp;quot;mt&amp;quot;:&amp;quot;Info&amp;quot;,&amp;quot;id&amp;quot;:&amp;quot;columbia&amp;quot;,&amp;quot;dn&amp;quot;:&amp;quot;Columbia&amp;quot;,&amp;quot;department&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;phonenumber&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;email&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;company&amp;quot;:{},&amp;quot;presence&amp;quot;:&amp;quot;offline&amp;quot;,&amp;quot;media&amp;quot;:[&amp;quot;voice&amp;quot;,&amp;quot;video&amp;quot;,&amp;quot;email&amp;quot;,&amp;quot;chat&amp;quot;],&amp;quot;order&amp;quot;:1}&lt;br /&gt;
[6] {&amp;quot;mt&amp;quot;:&amp;quot;GetPicture&amp;quot;,&amp;quot;id&amp;quot;:&amp;quot;columbia&amp;quot;}&lt;br /&gt;
[7] {&amp;quot;mt&amp;quot;:&amp;quot;IceConfig&amp;quot;,&amp;quot;stun&amp;quot;:&amp;quot;stun.innovaphone.com&amp;quot;,&amp;quot;turn&amp;quot;:&amp;quot;turn.innovaphone.com&amp;quot;}&lt;br /&gt;
[8] {&amp;quot;mt&amp;quot;:&amp;quot;Picture&amp;quot;,&amp;quot;id&amp;quot;:&amp;quot;atlantis&amp;quot;,&amp;quot;url&amp;quot;:&amp;quot;data:image/jpeg;base64...&amp;quot;}&lt;br /&gt;
[9] {&amp;quot;mt&amp;quot;:&amp;quot;Picture&amp;quot;,&amp;quot;id&amp;quot;:&amp;quot;columbia&amp;quot;,&amp;quot;url&amp;quot;:&amp;quot;data:image/jpeg;base64...&amp;quot;}&lt;br /&gt;
[10] {&amp;quot;mt&amp;quot;:&amp;quot;Info&amp;quot;,&amp;quot;id&amp;quot;:&amp;quot;atlantis&amp;quot;,&amp;quot;dn&amp;quot;:&amp;quot;Atlantis&amp;quot;,&amp;quot;department&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;phonenumber&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;email&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;company&amp;quot;:{},&amp;quot;presence&amp;quot;:&amp;quot;offline&amp;quot;,&amp;quot;media&amp;quot;:[&amp;quot;voice&amp;quot;,&amp;quot;video&amp;quot;,&amp;quot;email&amp;quot;,&amp;quot;chat&amp;quot;],&amp;quot;order&amp;quot;:0}&lt;br /&gt;
[11] {&amp;quot;mt&amp;quot;:&amp;quot;Info&amp;quot;,&amp;quot;id&amp;quot;:&amp;quot;atlantis&amp;quot;,&amp;quot;dn&amp;quot;:&amp;quot;Atlantis&amp;quot;,&amp;quot;department&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;phonenumber&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;email&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;company&amp;quot;:{},&amp;quot;presence&amp;quot;:&amp;quot;online&amp;quot;,&amp;quot;media&amp;quot;:[&amp;quot;voice&amp;quot;,&amp;quot;video&amp;quot;,&amp;quot;email&amp;quot;,&amp;quot;chat&amp;quot;],&amp;quot;order&amp;quot;:0}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[1] The &amp;quot;Start&amp;quot; request is sent with the unique id of the widget.&amp;lt;br&amp;gt;&lt;br /&gt;
[2] The app service sends the &amp;quot;Session&amp;quot; response providing the widget&#039;s display-name and other parameters.&amp;lt;br&amp;gt;&lt;br /&gt;
[3]-[6] The app service sends &amp;quot;Info&amp;quot; messages for all configured agents. Each &amp;quot;Info&amp;quot; message triggers a &amp;quot;GetPicture&amp;quot; request to get a picture of the agent.&amp;lt;br&amp;gt;&lt;br /&gt;
[7] The app service sends &amp;quot;IceConfig&amp;quot; providing the STUN and TURN config required for media calls.&amp;lt;br&amp;gt;&lt;br /&gt;
[8]-[9] The app service sends &amp;quot;Picture&amp;quot; messages for all agents.&amp;lt;br&amp;gt;&lt;br /&gt;
[10]-[11] The presence of an agent may change over time. Presence updates are provided with &amp;quot;Info&amp;quot; messages.&lt;br /&gt;
&lt;br /&gt;
== Initiating a call ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[1] {&amp;quot;mt&amp;quot;:&amp;quot;CreateCall&amp;quot;,&amp;quot;dest&amp;quot;:&amp;quot;atlantis&amp;quot;,&amp;quot;dn&amp;quot;:&amp;quot;Mein Name&amp;quot;}&lt;br /&gt;
[2] {&amp;quot;mt&amp;quot;:&amp;quot;Channels&amp;quot;,&amp;quot;cmd&amp;quot;:&amp;quot;PROPOSAL&amp;quot;,&amp;quot;sdp&amp;quot;:&amp;quot;...&amp;quot;}&lt;br /&gt;
[3] {&amp;quot;mt&amp;quot;:&amp;quot;CallInfo&amp;quot;,&amp;quot;state&amp;quot;:&amp;quot;alerting&amp;quot;}&lt;br /&gt;
[4] {&amp;quot;mt&amp;quot;:&amp;quot;CallInfo&amp;quot;,&amp;quot;state&amp;quot;:&amp;quot;connected&amp;quot;,&amp;quot;cmd&amp;quot;:&amp;quot;SELECT&amp;quot;,&amp;quot;sdp&amp;quot;:&amp;quot;...&amp;quot;}&lt;br /&gt;
[5] {&amp;quot;mt&amp;quot;:&amp;quot;ClearCall&amp;quot;}&lt;br /&gt;
[6] {&amp;quot;mt&amp;quot;:&amp;quot;CallInfo&amp;quot;,&amp;quot;state&amp;quot;:&amp;quot;terminated&amp;quot;}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[1] &amp;quot;CreatCall&amp;quot; message sets the target of the call (&#039;dest&#039;) and the own display name (&#039;dn&#039;).&amp;lt;br&amp;gt;&lt;br /&gt;
[2] &amp;quot;Channels&amp;quot; message provides the media offer for this call. Complete SDP offer is provided.&amp;lt;br&amp;gt;&lt;br /&gt;
[3] &amp;quot;CallInfo&amp;quot; is received giving information about the call&#039;s current state.&amp;lt;br&amp;gt;&lt;br /&gt;
[4] Next &amp;quot;CallInfo&amp;quot; is received telling the call was answered and deliviering the remote side&#039;s media answer.&amp;lt;br&amp;gt;&lt;br /&gt;
[5] Web site user terminates the call.&amp;lt;br&amp;gt;&lt;br /&gt;
[6] The final &amp;quot;CallInfo&amp;quot; message is received.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Troubleshooting =&lt;br /&gt;
&amp;lt;big&amp;gt;If an issue can be reproduced&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;*Web visitor in a browser.&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
The myApps web uses the logging facilities provided by the browser it runs in (i.e. JavaScript function &amp;lt;code&amp;gt;console.log&amp;lt;/code&amp;gt;).  In most browser this is available as &#039;&#039;Console&#039;&#039; after pressing F12.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;*The called agent working with myApps client.&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
The myApps platform services provide more elaborate tracing mechanisms. See &#039;&#039;Troubleshooting&#039;&#039; in [[Reference14r1:Concept_myApps_platform_services#Troubleshooting|Concept myApps platform services]].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;*Troubleshooting AP Services on the AP.&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
Troubleshooting a specific App instance on the AP [[Course13:IT_Plus_-_Tools_for_Troubleshooting#App_Service_Logs|Course13:IT_Plus_-_Tools_for_Troubleshooting#App_Service_Logs]]&lt;br /&gt;
&lt;br /&gt;
Go to the AP Manager and select the App instance from the Contact Widgets App. &lt;br /&gt;
Click on Diagnose and make sure that the box App is ticked. &lt;br /&gt;
[[File:AP-Diagnostics.png|thumb|none|AP-Diagnostics]]&lt;br /&gt;
Make sure that the logging of the App instance has been activated.&lt;br /&gt;
[[File:AP-DiagnosticsLogging.png|thumb|none|AP-Diagnostics-Logging]]&lt;br /&gt;
= Related Articles =&lt;br /&gt;
[[Howto14r1:Install_Contact_Widget_App|Howto14r1:Install_Contact_Widget_App]]&lt;/div&gt;</summary>
		<author><name>Npa</name></author>
	</entry>
	<entry>
		<id>https://wiki.innovaphone.com/index.php?title=Reference14r1:Concept_Contact_Widgets&amp;diff=70919</id>
		<title>Reference14r1:Concept Contact Widgets</title>
		<link rel="alternate" type="text/html" href="https://wiki.innovaphone.com/index.php?title=Reference14r1:Concept_Contact_Widgets&amp;diff=70919"/>
		<updated>2024-02-22T12:08:24Z</updated>

		<summary type="html">&lt;p&gt;Npa: /* What is a Contact Widget? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Concept|Conference]]&lt;br /&gt;
&lt;br /&gt;
= Applies To =&lt;br /&gt;
* innovaphone PBX from version 14r1&lt;br /&gt;
* innovaphone Application Platform&lt;br /&gt;
&lt;br /&gt;
= Requirements =&lt;br /&gt;
* innovaphone PBX&lt;br /&gt;
* innovaphone Application Platform&lt;br /&gt;
* Firmware Version 14r1&lt;br /&gt;
* One &#039;&#039;&#039;Port License&#039;&#039;&#039; is used by the app service to establish a VoIP registration at the PBX&lt;br /&gt;
* &#039;&#039;&#039;Video License&#039;&#039;&#039; (optional) is required to establish video connections [*]&lt;br /&gt;
* &#039;&#039;&#039;Widget License&#039;&#039;&#039; (optional) is required to remove any &#039;innovaphone&#039; branding from the Widget UI&lt;br /&gt;
&lt;br /&gt;
[*] &#039;&#039;&#039;UC License&#039;&#039;&#039; can also be used since it includes a &#039;&#039;&#039;Video License&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= What is a Contact Widget? =&lt;br /&gt;
A Contact Widget (or Website Widget) is an element that can be added to a website. It offers to website visitors a way to get in contact with agents (e.g. help-desk). Website visitors can start chat sessions (asking questions, getting answers) or can start voice or even video calls.&lt;br /&gt;
&lt;br /&gt;
An nice example for a &amp;quot;Sidebar Widget&amp;quot; can be viewed [https://www.innovaphone.com/de/ip-telefonie/innovaphone-pbx.html here].&amp;lt;br&amp;gt;&lt;br /&gt;
When you have opened this website the Sidebar Widget comes slowly into view on the right side.&lt;br /&gt;
&lt;br /&gt;
Example of a Business-Cards-Widget:&lt;br /&gt;
&lt;br /&gt;
[[File:Cardset-widget.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example of a Sidebar-Widget:&lt;br /&gt;
&lt;br /&gt;
[[File:Sidebar-Widget.png]]&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
[[File:Concept-widgets-overview.png|thumb|Overview]]&lt;br /&gt;
The central part of the new Widgets-Concept is the &#039;&#039;&#039;Contact-Widgets-App&#039;&#039;&#039;.&lt;br /&gt;
The Contact Widgets App is installed on the innovaphone Application Platform and it allows a PBX user to define Contact Widgets.&lt;br /&gt;
&lt;br /&gt;
Contact Widgets can be integrated in a Website to offer easy ways to website users to contact &#039;&#039;&#039;Agents&#039;&#039;&#039;. Agents are PBX users meant to communicate with external clients.&amp;lt;br&amp;gt;&lt;br /&gt;
There are 2 fundamental types of Contact Widgets:&lt;br /&gt;
* &#039;&#039;&#039;Sidebar Widgets&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Cardset Widgets&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A Sidebar Widget appears one side of the website trying to take as less space as possible. The website visitor can expand the Sidebar Widget if interested.&amp;lt;br&amp;gt;&lt;br /&gt;
A Cardset Widget appears as integrated part of the website content, offering one (or more) contacts in form of ordinary business cards.&lt;br /&gt;
&lt;br /&gt;
= Configuration =&lt;br /&gt;
For non experienced technicians have a look at [[Howto14r1:Install_Contact_Widget_App#Installation]] and follow the installation steps mentioned in the how-to article.&lt;br /&gt;
&lt;br /&gt;
Others:&lt;br /&gt;
* Download the &#039;Contact Widgets App&#039; via App Store.&lt;br /&gt;
* Install the App on the App Platform Manager.&lt;br /&gt;
* Create an instance for the Widgets App on the Manager. We recommend to use no capital letters and no special characters (also not such as space).&lt;br /&gt;
* Create a new PBX Object with the PBX Manager Plugin. (*)&lt;br /&gt;
* Assign App to authorized (admin) users, which will be allowed to create/change/delete Contact Widgets.&lt;br /&gt;
&lt;br /&gt;
Experts:&lt;br /&gt;
(*) You can also create the PBX Object manually:&amp;lt;br&amp;gt;&lt;br /&gt;
* Create a new object of type &amp;quot;App&amp;quot;.&lt;br /&gt;
* Give it a &amp;quot;Long Name&amp;quot; (&amp;quot;Contact Widgets&amp;quot;) and a Name (&amp;quot;widgets&amp;quot;) same as the instance-name.&lt;br /&gt;
* Give it a password, same as the instance password.&lt;br /&gt;
* On the &amp;quot;App&amp;quot; tab configure URL to App Service on App Platform (&amp;quot;http://&amp;lt;ipaddress-or-dnsname&amp;gt;/&amp;lt;instance-name&amp;gt;/innovaphone-widgets&amp;quot;).&lt;br /&gt;
* Activate option &amp;quot;Websocket&amp;quot;&lt;br /&gt;
* Grant access to APIs: &amp;quot;PbxSignal&amp;quot; (mandatory), &amp;quot;Admin&amp;quot; (optional) and &amp;quot;PbxApi&amp;quot; (mandatory)&lt;br /&gt;
&lt;br /&gt;
= Using the Contact Widgets App =&lt;br /&gt;
Click on one of the buttons (depending on what type of widget you want to create):&lt;br /&gt;
* [+ Add new sidebar widget]&lt;br /&gt;
* [+ Add new cardset widget]&lt;br /&gt;
A new (empty) widget is displayed. You can give the widget a name by clicking the pen-symbol. The widget name helps to identify widgets as soon the number of widgets starts to grow.&amp;lt;br&amp;gt;&lt;br /&gt;
You can expand and collaps widgets by clicking the header of each widget.&lt;br /&gt;
[[Image:Widget-code-new-widget.png|thumb|New Widget]]&lt;br /&gt;
&lt;br /&gt;
== Creating a new Widget ==&lt;br /&gt;
&lt;br /&gt;
New Widget features and options&lt;br /&gt;
&lt;br /&gt;
*You can add the main contact details for this widget&lt;br /&gt;
*Select the default language&lt;br /&gt;
*Set your prefered font settings&lt;br /&gt;
*Change the colour settings&lt;br /&gt;
*Change the margin settings&lt;br /&gt;
*z-index&lt;br /&gt;
&lt;br /&gt;
[[Image:Widget-new-widget-features.png|thumb|Widget Features]]&lt;br /&gt;
&lt;br /&gt;
== Adding Agent to Widget ==&lt;br /&gt;
You can add and remove Agents to a Widget. Agents can be contacted by external website visitors.&amp;lt;br&amp;gt;&lt;br /&gt;
New agents are added by clicking the [+] button inside the agents container.&lt;br /&gt;
[[File:Adding-new-agents.png|thumb|Adding agents]]&lt;br /&gt;
A dialog opens where you can define the agent. It all starts with the agent&#039;s &#039;SIP-ID&#039;. That&#039;s the dialable PBX user address. You can use the search function to find a PBX user by name.&lt;br /&gt;
&lt;br /&gt;
There are several (optional) attributes you can set for an agent, like &#039;Display name&#039;, &#039;Phone number&#039;, &#039;Email address&#039; and &#039;Picture&#039;. A picture can be placed by drag &amp;amp; drop or can be selected from local disk by clicking the placeholder rectangle.&lt;br /&gt;
&lt;br /&gt;
Finally you can define the ways of communication the agent is available for:&lt;br /&gt;
* Voice-only calls&lt;br /&gt;
* Video calls (including voice)&lt;br /&gt;
* Chat&lt;br /&gt;
* Email&lt;br /&gt;
&lt;br /&gt;
For a Cardset-Widget the order of agents could be relevant. You can change the order of agents in the Widgets-App by easy drag &amp;amp; drop using the mouse.&lt;br /&gt;
&lt;br /&gt;
Each widget gets a unique ID (uuid) assigned on its initial creation. This uuid is used to identify the widget when it is integrated into a website.&lt;br /&gt;
&lt;br /&gt;
In case of a sidebar widget, the agent&#039;s card will be displayed by default depending on its status(availability) unless you checked &amp;quot;Always show widget&amp;quot; under the sidebar settings.&lt;br /&gt;
&lt;br /&gt;
In case of a cardset widget, the agent card will always be shown, but its availability is depending on its status.&lt;br /&gt;
&lt;br /&gt;
The following settings are possible:&lt;br /&gt;
* Presence*: Display/availability of the card based on the presence status of the agent. Presence available (green), Presence unavailable, busy (red). Usage: Normal agent based on availability.&lt;br /&gt;
* Always online: Permanent display/availability of the card regardless of its presence or busy status. Usage: Multiple consecutive calls to the same destination, an agent with multiple line configuration, a group or waiting queue.&lt;br /&gt;
* Boolean*: Display of the card depending on the true status of a Boolean object.  Usage: Agent, group or waiting queues based on boolean settings.&lt;br /&gt;
* Inactive: Agent card is permanently in the status unavailable (red). Usage: Showing the agent in a cardset, but limit the access to the agent for a longer period. (holiday, sick-leave or other reasons)&lt;br /&gt;
(* Important: Presence and boolean status are dependent on the visibility configured on all the monitored objects, eg. agent user objects and monitored boolean objects)&lt;br /&gt;
&lt;br /&gt;
= Integrating Widgets into Website =&lt;br /&gt;
Now it is the website admin&#039;s turn to integrate the widget into the website.&amp;lt;br&amp;gt;&lt;br /&gt;
To do this, click the [Code] button in the Widgets App at that widget you want to include. A popup appears showing a handful of code lines (HTML and Javascript).&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Widget-code-popup.png|thumb|Code Popup]]&lt;br /&gt;
You can &#039;&#039;copy&#039;&#039; the code lines into clipboard by clicking the [Copy] button.&amp;lt;br&amp;gt;&lt;br /&gt;
You can &#039;&#039;paste&#039;&#039; the code lines from clipboard into your website code.&amp;lt;br&amp;gt;&lt;br /&gt;
There&#039;s also a [Download] button. When clicking this button a small HTML file is saved on your local computer. This HTML file can be opened in a browser to preview the widget and test the widget&#039;s functionality.&lt;br /&gt;
&lt;br /&gt;
== Content-Security-Policy ==&lt;br /&gt;
If the website uses Content-Security-Policy (CSP) it could be necessary to add entries to config sections &#039;default-src&#039; and &#039;img-src&#039;.&lt;br /&gt;
* The Widget opens a secure websocket connection (wss:)&lt;br /&gt;
* The Widget loads images via Data-URL (data:).&lt;br /&gt;
* The Widget uses Mail-Links (mailto:).&lt;br /&gt;
* The Widget uses Tel-Links (tel:).&lt;br /&gt;
  &amp;lt;meta&lt;br /&gt;
    http-equiv=&amp;quot;Content-Security-Policy&amp;quot; content=&amp;quot;&lt;br /&gt;
      default-src &#039;self&#039; &#039;&#039;&#039;wss://*.innovaphone.com&#039;&#039;&#039;; child-src &#039;self&#039; &#039;&#039;&#039;mailto:&#039;&#039;&#039; &#039;&#039;&#039;tel:&#039;&#039;&#039;; img-src &#039;&#039;&#039;data:&#039;&#039;&#039;&amp;quot;&lt;br /&gt;
  /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= After Integration =&lt;br /&gt;
Once your widget is live on the website you can still change and update the widget in the Widgets-App. You can update the list of agents or change any other attribute. As soon as you click the widget&#039;s [Save] button any open widget instance in a web browser will update immmediately. No need for the website administrator to update the code.&lt;br /&gt;
&lt;br /&gt;
= Widget-API — Protocol between Website Widget and App Service =&lt;br /&gt;
Basically, this section does not matter. To create and use widgets, knowledge about the protocol is not required.&amp;lt;br&amp;gt;&lt;br /&gt;
All who are interested in technical details are welcome to read on.&lt;br /&gt;
&lt;br /&gt;
== Loading the Widget ==&lt;br /&gt;
&lt;br /&gt;
When a widget is loaded in the browser window of the website visitor, a websocket connection is opened to the app service on the innovaphone Application Platform. Once the websocket connection is established it goes like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[1] {&amp;quot;mt&amp;quot;:&amp;quot;Start&amp;quot;,&amp;quot;uuid&amp;quot;:&amp;quot;fadc5da4cae94bfc9434d9957ea08ccb&amp;quot;}&lt;br /&gt;
[2] {&amp;quot;mt&amp;quot;:&amp;quot;Session&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Visitenkarten&amp;quot;,&amp;quot;lang&amp;quot;:&amp;quot;de&amp;quot;,&amp;quot;strings&amp;quot;:{...}}&lt;br /&gt;
[3] {&amp;quot;mt&amp;quot;:&amp;quot;Info&amp;quot;,&amp;quot;id&amp;quot;:&amp;quot;atlantis&amp;quot;,&amp;quot;dn&amp;quot;:&amp;quot;Atlantis&amp;quot;,&amp;quot;department&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;phonenumber&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;email&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;company&amp;quot;:{},&amp;quot;presence&amp;quot;:&amp;quot;online&amp;quot;,&amp;quot;media&amp;quot;:[&amp;quot;voice&amp;quot;,&amp;quot;video&amp;quot;,&amp;quot;email&amp;quot;,&amp;quot;chat&amp;quot;],&amp;quot;order&amp;quot;:0}&lt;br /&gt;
[4] {&amp;quot;mt&amp;quot;:&amp;quot;GetPicture&amp;quot;,&amp;quot;id&amp;quot;:&amp;quot;atlantis&amp;quot;}&lt;br /&gt;
[5] {&amp;quot;mt&amp;quot;:&amp;quot;Info&amp;quot;,&amp;quot;id&amp;quot;:&amp;quot;columbia&amp;quot;,&amp;quot;dn&amp;quot;:&amp;quot;Columbia&amp;quot;,&amp;quot;department&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;phonenumber&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;email&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;company&amp;quot;:{},&amp;quot;presence&amp;quot;:&amp;quot;offline&amp;quot;,&amp;quot;media&amp;quot;:[&amp;quot;voice&amp;quot;,&amp;quot;video&amp;quot;,&amp;quot;email&amp;quot;,&amp;quot;chat&amp;quot;],&amp;quot;order&amp;quot;:1}&lt;br /&gt;
[6] {&amp;quot;mt&amp;quot;:&amp;quot;GetPicture&amp;quot;,&amp;quot;id&amp;quot;:&amp;quot;columbia&amp;quot;}&lt;br /&gt;
[7] {&amp;quot;mt&amp;quot;:&amp;quot;IceConfig&amp;quot;,&amp;quot;stun&amp;quot;:&amp;quot;stun.innovaphone.com&amp;quot;,&amp;quot;turn&amp;quot;:&amp;quot;turn.innovaphone.com&amp;quot;}&lt;br /&gt;
[8] {&amp;quot;mt&amp;quot;:&amp;quot;Picture&amp;quot;,&amp;quot;id&amp;quot;:&amp;quot;atlantis&amp;quot;,&amp;quot;url&amp;quot;:&amp;quot;data:image/jpeg;base64...&amp;quot;}&lt;br /&gt;
[9] {&amp;quot;mt&amp;quot;:&amp;quot;Picture&amp;quot;,&amp;quot;id&amp;quot;:&amp;quot;columbia&amp;quot;,&amp;quot;url&amp;quot;:&amp;quot;data:image/jpeg;base64...&amp;quot;}&lt;br /&gt;
[10] {&amp;quot;mt&amp;quot;:&amp;quot;Info&amp;quot;,&amp;quot;id&amp;quot;:&amp;quot;atlantis&amp;quot;,&amp;quot;dn&amp;quot;:&amp;quot;Atlantis&amp;quot;,&amp;quot;department&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;phonenumber&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;email&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;company&amp;quot;:{},&amp;quot;presence&amp;quot;:&amp;quot;offline&amp;quot;,&amp;quot;media&amp;quot;:[&amp;quot;voice&amp;quot;,&amp;quot;video&amp;quot;,&amp;quot;email&amp;quot;,&amp;quot;chat&amp;quot;],&amp;quot;order&amp;quot;:0}&lt;br /&gt;
[11] {&amp;quot;mt&amp;quot;:&amp;quot;Info&amp;quot;,&amp;quot;id&amp;quot;:&amp;quot;atlantis&amp;quot;,&amp;quot;dn&amp;quot;:&amp;quot;Atlantis&amp;quot;,&amp;quot;department&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;phonenumber&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;email&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;company&amp;quot;:{},&amp;quot;presence&amp;quot;:&amp;quot;online&amp;quot;,&amp;quot;media&amp;quot;:[&amp;quot;voice&amp;quot;,&amp;quot;video&amp;quot;,&amp;quot;email&amp;quot;,&amp;quot;chat&amp;quot;],&amp;quot;order&amp;quot;:0}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[1] The &amp;quot;Start&amp;quot; request is sent with the unique id of the widget.&amp;lt;br&amp;gt;&lt;br /&gt;
[2] The app service sends the &amp;quot;Session&amp;quot; response providing the widget&#039;s display-name and other parameters.&amp;lt;br&amp;gt;&lt;br /&gt;
[3]-[6] The app service sends &amp;quot;Info&amp;quot; messages for all configured agents. Each &amp;quot;Info&amp;quot; message triggers a &amp;quot;GetPicture&amp;quot; request to get a picture of the agent.&amp;lt;br&amp;gt;&lt;br /&gt;
[7] The app service sends &amp;quot;IceConfig&amp;quot; providing the STUN and TURN config required for media calls.&amp;lt;br&amp;gt;&lt;br /&gt;
[8]-[9] The app service sends &amp;quot;Picture&amp;quot; messages for all agents.&amp;lt;br&amp;gt;&lt;br /&gt;
[10]-[11] The presence of an agent may change over time. Presence updates are provided with &amp;quot;Info&amp;quot; messages.&lt;br /&gt;
&lt;br /&gt;
== Initiating a call ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[1] {&amp;quot;mt&amp;quot;:&amp;quot;CreateCall&amp;quot;,&amp;quot;dest&amp;quot;:&amp;quot;atlantis&amp;quot;,&amp;quot;dn&amp;quot;:&amp;quot;Mein Name&amp;quot;}&lt;br /&gt;
[2] {&amp;quot;mt&amp;quot;:&amp;quot;Channels&amp;quot;,&amp;quot;cmd&amp;quot;:&amp;quot;PROPOSAL&amp;quot;,&amp;quot;sdp&amp;quot;:&amp;quot;...&amp;quot;}&lt;br /&gt;
[3] {&amp;quot;mt&amp;quot;:&amp;quot;CallInfo&amp;quot;,&amp;quot;state&amp;quot;:&amp;quot;alerting&amp;quot;}&lt;br /&gt;
[4] {&amp;quot;mt&amp;quot;:&amp;quot;CallInfo&amp;quot;,&amp;quot;state&amp;quot;:&amp;quot;connected&amp;quot;,&amp;quot;cmd&amp;quot;:&amp;quot;SELECT&amp;quot;,&amp;quot;sdp&amp;quot;:&amp;quot;...&amp;quot;}&lt;br /&gt;
[5] {&amp;quot;mt&amp;quot;:&amp;quot;ClearCall&amp;quot;}&lt;br /&gt;
[6] {&amp;quot;mt&amp;quot;:&amp;quot;CallInfo&amp;quot;,&amp;quot;state&amp;quot;:&amp;quot;terminated&amp;quot;}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[1] &amp;quot;CreatCall&amp;quot; message sets the target of the call (&#039;dest&#039;) and the own display name (&#039;dn&#039;).&amp;lt;br&amp;gt;&lt;br /&gt;
[2] &amp;quot;Channels&amp;quot; message provides the media offer for this call. Complete SDP offer is provided.&amp;lt;br&amp;gt;&lt;br /&gt;
[3] &amp;quot;CallInfo&amp;quot; is received giving information about the call&#039;s current state.&amp;lt;br&amp;gt;&lt;br /&gt;
[4] Next &amp;quot;CallInfo&amp;quot; is received telling the call was answered and deliviering the remote side&#039;s media answer.&amp;lt;br&amp;gt;&lt;br /&gt;
[5] Web site user terminates the call.&amp;lt;br&amp;gt;&lt;br /&gt;
[6] The final &amp;quot;CallInfo&amp;quot; message is received.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Troubleshooting =&lt;br /&gt;
&amp;lt;big&amp;gt;If an issue can be reproduced&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;*Web visitor in a browser.&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
The myApps web uses the logging facilities provided by the browser it runs in (i.e. JavaScript function &amp;lt;code&amp;gt;console.log&amp;lt;/code&amp;gt;).  In most browser this is available as &#039;&#039;Console&#039;&#039; after pressing F12.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;*The called agent working with myApps client.&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
The myApps platform services provide more elaborate tracing mechanisms. See &#039;&#039;Troubleshooting&#039;&#039; in [[Reference14r1:Concept_myApps_platform_services#Troubleshooting|Concept myApps platform services]].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;*Troubleshooting AP Services on the AP.&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
Troubleshooting a specific App instance on the AP [[Course13:IT_Plus_-_Tools_for_Troubleshooting#App_Service_Logs|Course13:IT_Plus_-_Tools_for_Troubleshooting#App_Service_Logs]]&lt;br /&gt;
&lt;br /&gt;
Go to the AP Manager and select the App instance from the Contact Widgets App. &lt;br /&gt;
Click on Diagnose and make sure that the box App is ticked. &lt;br /&gt;
[[File:AP-Diagnostics.png|thumb|none|AP-Diagnostics]]&lt;br /&gt;
Make sure that the logging of the App instance has been activated.&lt;br /&gt;
[[File:AP-DiagnosticsLogging.png|thumb|none|AP-Diagnostics-Logging]]&lt;br /&gt;
= Related Articles =&lt;br /&gt;
[[Howto14r1:Install_Contact_Widget_App|Howto14r1:Install_Contact_Widget_App]]&lt;/div&gt;</summary>
		<author><name>Npa</name></author>
	</entry>
</feed>