Courseware:IT Advanced - 05 Setting up the Apps
This books looks at the setup of various standard Apps in more detail
More PBX vs. instance interaction
Reports
- download the Reporting App service from the App store and create a new instance
- create the App objects in the PBX and configure the appropriate URLs and flags so it is known how to access them
- assign the Apps to a user to make them available in myApps
we have already done these steps before - configure CDR delivery from the PBX to the Reporting App service
- setup users so that they have the appropriate licenses for their calls to appear in Reporting
The server side
You can also leave both properties empty (as the Install does). However, this would allow anyone to send CDRs to the service, which you might not want.
This is a property of the App service instance and as such configured in the
Configuration dialog of the Settings App plugin Christoph's AP reporting: - set User name to
cdr - set Password to
ip411 (of course, in real life, etc. etc.
)
The client side
The check-mark needs to be set therefore in PBX / Config / General (our
master PBX)
To use our reports App service instance for call lists, configure - select
HTTPS as Log Server Type - use
apps-dvl-ckl2.training.innovaphone.com as Address as this is the DNS name of your AP - leave Port empty (which will use the https default port 443)
- select
External (GET) as Method - use
/dvl-ckl2.net/reporting/cdr as Path
Note that the prefix/dvl-ckl2.net/reporting is what has been
configured as Webserver path in your Reporting instance while /cdr is a fixed part you always use to send CDRs to the Reporting service instance - configure User like you did on the server side before, which is
cdr . Note that this user name will only be used to authenticate the delivery of CDRs to the Reporting App service instance - configure the Password like you did on the server side, which is
ip411 . Note that this password will again only be used to authenticate the delivery of CDRs to the Reporting App service instance
configured as Webserver path for our app service instance before, so all URLs provided by this instance will share this prefix. However, the trailing Trying it out
To try it out, we can start the Call List App:
start the calllist App from the ALL APPS area- the App starts up empty.
But when you - lift the handset on the analog phone (which we have registered for John Doe before)
- call 14
- and hang up again,
you'll see
new entries appearing
Licensing
Just to be on the safe side,
start Reporting to see if this works too- Leave all fields as is in the selection criteria, so that we see todays calls for all users and hit
Show results
So
assign the Reporting license to John Doe- call 14 again with the analog phone
- refresh the list of calls by
clicking on Show results again
When the Reporting license is assigned to a user, all subsequent calls will be listed in the Reporting App . Previous calls will still not show up. For historical reasons, there is some confusion regarding the name of the App. It should have been called Reporting from the very beginning but it started out as Reports and therefore, you find both names.
Users
WebSocket check-mark is ticked in the profile App object in the PBX. - download the Users App service from the App store and create a new instance
- create the App objects in the PBX and configure the appropriate URLs and flags so it is known how to access them
- assign the Apps to a user to make them available in myApps
- configure the Profile App as the app to be linked from myApps burger menu
- configure user replication
The App service
To install the Users App service and create a new instance, we can use the App installer:- open the Settings App in myApps
- start the Christoph's AP app installer
- install the Users App service using version
srTraining
You now have
an instance called usersapp running and hence a
new Christoph's AP usersapp plugin in the Settings App (be sure to re-start the App to see it)
The App objects
Just like before with the Reporting App , the way to do this is:- use the + Add app function of the Christoph's AP usersapp Settings App plugin to
add the App objects
for - the Users App (Name
Users , SIPusers ) - the Users admin App (Name
Users Admin , SIPusers-admin ) - the Profile App (Name
Profile , SIPprofile ) - and the Users APIs API to the PBX (Name
UsersApi , SIPusers-apis ) - now we can
assign the users, profile and users-admin App as well as the users-apis to John Doe in his user record in the PBX - then
start the Users Admin App from the ALL APPS area
Replication
WebSocket
WebSocket flag is set in an App object, the PBX strips the last component of the URL property (leaving
As soon as the WebSocket connection between the PBX and the App service instance is established, the state shown next to the URL property field
changes to connected. If it stays in the connecting state, there is probably something wrong with the credentials or the URL. Also, the App service instance may not be running. Replicator properties
complaining.
To fix that, you need to enter- the PBX Password (we had set that to
ip411 in the PBX) - and the PBX name (which is
hq )
Self-service device provisioning
options to add phones in their profile. If it is turned off, the assigned phones will just be
listed with no option to add one.
The second check-mark in the PERMISSIONS section (Allow to edit the name and the display name on the app profile) allows end users to change their own Name and Display name properties. While this won't break configurations, it might still be undesirable: for example, users can then set their Display name to whatever they want, including the name of other users.
To set these values to what the Install would set, - set the password policy's Minimum length to
8 and - Minimum number of categories to
1 - set the default settings - new user's Node to
root (so far, there is no other node than root), - PBX name to the name of the master PBX (which is
hq ), - Default password (import) to
password , - Home screen apps to
users , - Template to
Config User (which does not yet exist in our PBX but we'll create it later)
The Home screen apps property defines the Apps the user will find on the myApps home screen initially. It consists of a comma separated list of SIP values (or, in the advanced UI, the Name property) of the apps which shall appear.
the Home Screen Apps property from the User tab of this user in the advanced UI.The profile App
user's own profile editor through its burger-menu.
no Edit profile link. This is because we need to configure the profile App that should be linked-to in
is empty, so no profile App is linked.
This can easily be fixed using the Users Settings App plugin (Christoph's AP usersapp):- when you click on Users configuration / Change configuration a drop-down will appear (admittedly, it doesn't look like one initially, but just trust me and click on it, you'll see a drop-down list).
Select
your Christoph-IP411LEFT here (as it is the master PBX). It is the only choice at that moment - you will see a dialog there which allows you to set the Profile app. Even more, it allows you to control some additional behavior in your PBX:
- can users register themselves?
- can users reset their password?
- can users delete their account?
Just click on profile (this is the only profile editing app we have anyway). You can
select whatever you like for the other choices, but letting users register and delete themselves is a rather rare setting (unless you run a web-based public PBX) - once you have saved the new settings, you will see the settings in
PBX / Config / myApps
updated and the Edit profile link appears (you might have to re-open the profile though for the change to take effect)
All these settings are done in the individual PBX settings. Therefore, they must be done on each PBX in the system (if you have multiple, that is)!Contacts
Even though we run the risk to bore you, here is how to do this: - open the Settings App in myApps
- start the Christoph's AP app installer
- install the Contacts App service using version
srTraining
You now have
an instance called contacts running and hence a
new Christoph's AP contacts plugin in the Settings App (be sure to re-start the manager to see it)
As before, you need to add the App objects using the Settings App plugin:- use the Christoph's AP contacts Settings App plugin to add the App objects for
- Contacts (Name
Contacts , SIPcontacts ) - Contacts admin (Name
Contacts Admin , SIPcontacts-admin ) - Contacts API (name
ContactsApi , SIPcontacts-api ) - assign
contacts ,contacts-admin andcontacts-api to John Doe - start Contacts Admin
upload the
Sample contacts file (UTF8) in to the new instance- type
fen in to the search window
you should see the
entry for Renée-François Fenêtre if everything went well.
Name/number resolution overview
- name resolution maps a name to a number (e.g. by looking up the name in a directory so the user can use it to dial out). As this is usually what a user expects to happen when he does an outgoing call, a.k.a. forward lookup
- number resolution does the opposite thing: it resolves a number to a name (e.g. to display the caller-id for an incoming call), a.k.a. reverse lookup
Directory Interfaces
- local
The hard-phones feature a local directory list which can be edited by the end-user (on the phone) - LDAP
both the phone and the PBX can use LDAP to look in to a directory (which might be a Contacts App service instance, an external LDAP server or the PBX internal LDAP server) - search-API provider
myApps (and hence all the Apps running inside myApps) can use the com.innovaphone.search API. There are several providers for this API: - the Users App service instances. Provides data for PBX User and Executive objects
- the Contacts App service instances. Provides data for the entries stored in their respective database
- the PBX LDAP objects. Provide proxy access to entries stored in a remote LDAP server. myApps can not talk LDAP directly. These objects are the way to provide access to LDAP entries for myApps.
- your local Outlook contacts. myApps for Windows will search your local Outlook contacts for a matching name.
Directories
- the
PBX User database
these are the PBX objects that do not have the Hide from LDAP property set. They are made available both by the PBX's internal LDAP server (via LDAP obviously) and the Users App service instance as a com.innovaphone.search API provider to Apps running in myApps (however, limited to User and Executive objects only in the latter case) - the directory entries uploaded to the
Contacts App service instances
made available by the Contacts App service instances both via LDAP and as a com.innovaphone.search API provider - contact entries stored in the user's own
Outlook installation (e.g. an Exchange contacts folder)
made available by the myApps launcher as a com.innovaphone.search API provider - directory entries stored in the user's own
hard-phone
accessed locally and hence only available on a single phone - directory entries stored in an LDAP compatible
3rd party directory server such as Estos' MetaDir, C4B's XPhone Virtual Directory or any OpenLDAP server
made available both by the 3rd party's server (via LDAP obviously) and (optionally) by an LDAP type PBX object
pretty complex scenario. But don't be afraid, we'll look in to how this works in the next sections. Number resolution in action
- An external call comes in
It is received by the PBX's signaling core. The signaling core now uses it's
configured Reverse Lookup URL and
performs a reverse lookup request (as to map the incoming number to a caller-id).
The Reverse Lookup URL usually points towards a Contacts App service instance. However, it does not need to. If you decide to use an external directory system instead, you can do so (see
Concept Number Resolution and LDAP for some samples how to address other services) - meanwhile,
the call is forwarded to both the hard-phone (using H.323) and to myApps (more precisely, to the phone App running in myApps, using the EpSignal WebSocket API) - when a search result is received from Contacts, the PBX creates a name-identification from it (this could look like Christoph Künkel innovaphone AG for example) and sends it to the hard-phone and to the phone App (again using H.323 and EpSignal, respectively) which will display it to the user
- the phone App does an attempt to even do better and sends the name-id (Christoph Künkel innovaphone AG) to the search API available in myApps. myApps will
forward this request to all search API providers available: - Contacts
- Users
- any PBX LDAP object available
- Outlook contacts
For an outgoing call, the scheme is pretty similar:Each of them may or may not yield a result, however, the Contacts App service certainly will, as the name-id was constructed from its search result by the PBX in the first place. The difference now is, that the full directory information is available to the phone App which will use it to display a
nice vCard
Note that the hard-phone does not do any such attempt, as it relies on the PBX to do the reverse number lookup and also has no ability to display extended vCard information.
This behavior is controlled by theDisable Phonenumber Look-up check-mark in the user's Phone configuration. For legacy installations (pre-V13), this is turned off (so that phone number lookup is done) because the PBX did not do the reverse lookup in these systems
Also note that reverse lookup is only performed for calls to user objects. For example, if you call a waiting queue with two agents, number resolution will be done for each agent separately (as there might be different results) but it will not be done for the waiting queue. So when looking at a call report for the waiting queue, no resolved names will be seen.
- the call is sent from the endpoint (either hard-phone or phone App) to the PBX
- the PBX does the reverse lookup and sends back a name-id
- myApps attempts to display a vCard and sends a search request to the search API therefore
In fact, there are other apps in an innovaphone system that offer a com.innovaphone.search (i.e. a search API) interface. However, the phone app only searches for results of the type contact:Only those providers that deliver such result types are of interest here. The search provider of the Conference app, for example, will not return any such results. Other result types are described in the
SDK API description. Number normalisation
the Prefix for Intl/Ntl/Subscriber/Area-Code/Country-Code properties in - if the number matches the Intl prefix (usually 000), the prefix is removed
000497031730090 -> 497031730090 - otherwise, if the number matches the Ntl prefix (usually 00), the prefix is removed and the Country-Code (49 in our example) is prepended
007031730090 -> 7031730090 -> 497031730090 - the resulting number (497031730090) is made available to the Reverse Lookup URL as variable %n
- in the default lookup URL
ldap://apps-dvl-ckl2.training.innovaphone.com/dc=entries?givenname,sn,company?sub?(metaSearchNumber=+%n)?bindname=apps.dvl-ckl2.net\contacts
you see the part metaSearchNumber=+%n. %n is replaced by 497031730090 as shown above. The URL also has a + (plus sign) in front of the %n, so the number actually looked up in the directory is
+497031730090
which is actually the full international format usually maintained in a directory (although it might be displayed with some decoration as in +49 (70317) 3009-0)
So keep in mind that your directories should always contain all numbers in a full international format! Otherwise, reverse number resolution might not work.Name resolution in action
- the user types in a search string in the phone App
- the phone App will send the string to myApp's com.innovaphone.search API
- myApps will
forward the search request to all com.innovaphone.search providers, e.g. - Outlook
- Users
- Contacts
- any available PBX object of type LDAP
- incoming results will be displayed to the user
- the user selects an entry (and the number within this entry, there might be multiple)
- the phone App
creates a call using the EpSignal API and sends the selected number with it - the PBX
forwards the call to the users local phone and the remote peer (using either the appropriate trunk or a local PBX object)
Number normalization
type
input
dialed
international numbers +49 (7031) 73009-123 00049703173009123 international numbers with full dialing prefixes 00049703173009123 00049703173009123 international numbers 0049703173009123 00049703173009123 national numbers 0703173009123 00703173009123 subscriber numbers 73009123 073009123 local extensions 123
123
Name resolution in action (cntd.)
- when the user types in a search string the phone would consult 3 different databases, depending on the
registered user's Phone/Directory configuration: - the Local phone-book, which is stored in the phone's flash memory and can be maintained by the user itself directly on the phone
- the PBX phone-book, which lists all the PBX objects
- the External LDAP Server phone-book, which usually is configured to look in to the Contacts database
Except for the Local phone-book, they areaccessed using LDAP
- the call is then
sent to the PBX with H.323 and forwarded both to the remote peer (using SIP) and the phone App running in myApps (using EpSignal)
Note that also for outgoing calls, the PBX will do a reverse number lookup for the called party as explained in Number resolution in action above. Again, the result is sent back both to the hard-phone and the phone App (this is the reason why you ultimately see the nice vCard of the called party again in myApps). The full picture
Multiple directory sources
- forward lookup on the phone allows access to :
- one external phone-book (the External LDAP Server). Access to it is controlled by the User PBX object's Phone configuration
- and the phone-book stored directly on the phone
- forward lookup in the phone App (that is, in myApps) can handle many phone-books:
- zero or more Contacts App service instances
- as well as zero or more external LDAP servers connected through PBX LDAP objects.
Access to those phone-books is controlled by the respective User PBX object's Apps tab - local Outlook contact folders for myApps running on Windows
- reverse lookup (being done centrally in the PBX) can only use a single phone-book, connected through LDAP (controlled by the PBX's Reverse Lookup URL property). Individual results are made available to all PBX users (that is, directory lookup is done in a user-specific way, so that different users can yield different results, for example if they have different personal address books (see
Reverse Number Lookup for Personal Directories for details))
use Contacts- a single Contacts App service instance is used for forward- and reverse-lookup
- no PBX LDAP objects
use 3rd party directory- Contacts is not used
- Instead, a 3rd party LDAP server is used in the PBX's Reverse Lookup URL property and in a single PBX LDAP object
Configure Forward Lookup
To configure forward lookup in myApps (and hence the phone App), you need to - enable
all the com.innovaphone.search API providers in John Doe's PBX User object's Apps tab. These are - contacts-api
- users-api
Note that there is no App check-mark for the Outlook search provider. This is available to myApps simply due to the fact that it is installed on the PC where myApps runs.
Also, if a user may search a directory (as allowed by enabling the search providers above) it obviously makes sense to give access to their respective UI too. So we also tick the
- contacts and
- users
To enable forward lookup on the hard-phone, we need to configure the directories to be used by the phone. This is done in the user's Phone config tab in the PBX.check-marks.
At first we need to activate the
Store Phone config checkmark in John Doe's user object because otherwise changes of the phone config wont be transmitted to the phone.
To enable the local phone-book on the phone
To configure access to the PBX's objects (such as e.g. Users), you need to configure the LDAP access to your PBX in
the PBX section:- tick the
Enable andUse TLS check-marks - leave the Server property empty. In this case, the server address found in the phone's registration configuration is used and this is most likely what you want
- leave the Port property empty. In this case, the LDAP (389) or LDAPS (636) default port is used, depending on your Use TLS setting. Again, this is probably what you want
- set the Username to a name in the domain\user format. The domain is your PBX's DNS (hq-dvl-ckl2.training.innovaphone.com in your case). We suggest to use ldap-guest as user. So in your case, you end up with
hq-dvl-ckl2.training.innovaphone.com\ldap-guest - set the Password to a secure password (yeah, you guessed it, in this course, you set it to
ip411 ) - leave the Gatekeeper Identifier property empty
- Leave the Name Attribute property as-is. You could set it to Display Name instead of Long Name. However, Display Names are not unique throughout the system, so you could get ambiguous results, which you probably don't want
To configure access to the entries found in Contacts, you need to set
the External LDAP Server properties:- tick the
Enable andUse TLS check-marks - set the Server property to the DNS name of your App platform (
apps-dvl-ckl2.training.innovaphone.com in your case) - leave the Port property empty. In this case, the LDAP (389) or LDAPS (636) default port is used, depending on your Use TLS setting. This is probably what you want
- set the Username to a name in the domain\user format. domain is the DNS name of your App platform (dvl-ckl2.training.innovaphone.com in your case). user is the name of your Contacts App service (contacts). So in your case, you end up with
apps-dvl-ckl2.training.innovaphone.com\contacts - set the Password to a secure password (again, how boring, we use
ip411 in the course) - set Search Base to
dc=entries (just don't ask
this is a hard-wired value imposed by the Contacts app service) - leave Mode as is (that is,
basic ). Again, this is a hard-wired value imposed by the Contacts app service - leave Object Filter empty
- leave Sort Results un-ticked
- leave Name Attributes empty since it is a legacy option and not required to configure any longer.
- leave Number Attributes empty (remember: we do not use reverse lookup on the phone)
- set H323 ID Attribute to
sip
(this is the name of the attribute in the Contacts database which allows to be called like a phone number) - set the Detail Attributes to
title,company,street,postalCode,city,country,email,url
This is something you may modify to your taste. It defines the way the phone would construct the display search result entry - set the Meta Name Attribute to
metaSearchText - set the Meta Number Attribute to
metaSearchNumber
These two Meta attributes are an interesting case. They are meant for servers which can perform intelligent wildcard searches on their own, just based on a simple search string given as value for the meta attribute. This often leads to better search performance but requires a server which is capable of doing it. Contacts is
. If you use an LDAP server that can't do it, leave the Meta- attributes empty. In this case, the LDAP client will construct its own search expression based on the Name Attributes and Number Attributes.
- leave the Hold Server Connection property as is
To set the
Dialing Location for the phones- set Country Code to the country code of your trunk line,
49 in your case - set Area Code to the area code of your trunk line
If there are no area codes in your country, this field must be left empty. So for you, set it to621 - set National Prefix to the prefix you need to dial to access a national number but without the trunk access prefix (this is the difference to the setting in PBX/Config/General).
So for you, set it to0 - set International Prefix to the prefix you need to dial to access a international number but without the trunk access prefix (this is the difference to the setting in PBX/Config/General).
00 - set External Line to the trunk-access prefix of your trunk. In your case, this is
0 - leave Subscriber Numbers as-is (empty)
- set Max Internal Number Length to
7 (so it is consistent with the hard-coded limit implemented in the phone App)
... PBX local LDAP server
PBX local LDAP server
- add a new User called
hq-dvl-ckl2.training.innovaphone.com\ldap-guest with Passwordip411
This needs to be exactly the credentials you have configured in the
PBX settings of the PBX User record in the last section! - make sure you tick the
Apply Hide check-mark for this new user - optionally delete the existing ldap-guest user. This legacy setting is there by default but is not suitable for remote access to the PBX LDAP (that is, access through a reverse proxy)
... Contacts LDAP server
Contacts LDAP server
To see the configuration of your Contacts App service instance - open the Settings App in myApps
- click on the Christoph's AP contacts plugin
- click on Change configuration
Set the User (LDAP) to
To complete the Contacts LDAP server configuration- type a secure password in to the Password (LDAP) field
In this course, as usual, useip411 - tick the
Enable LDAP check-mark to start the LDAP server
The Install also does this configuration for you (although slightly differently). If you used the Install and you need to know the secure password created by the Install, you can always run the plugin and tick the Display check-mark to see the password.
... number/name resolution in the PBX
Reverse lookup
To configure reverse lookup in the PBX- set the
Reverse Lookup URL in PBX / Config / General toldaps:// DNS-name-of-your-AP/dc=entries?givenname,sn,company?sub?(metaSearchNumber=+%n)?bindname= ldap user configured in your Contacts instance
The ldap user would be what you have configured as User (LDAP) in the Christoph's AP contacts Settings App plugin.
In your case, this isldaps://apps-dvl-ckl2.training.innovaphone.com/dc=entries?givenname,sn,company?sub?(metaSearchNumber=+%n)?bindname=apps-dvl-ckl2.training.innovaphone.com\contacts - set the Password to what is configured as User (LDAP) in the Christoph's AP contacts Settings App plugin. In your case (as usual)
ip411 - make sure
Prefix for Intl/Ntl/Subscriber are set to - Intl: prefix to access international numbers, including the trunk-access-code. In your case
000 - Ntl: prefix to access national numbers, including the trunk-access-code.
In your case
00 - Subscriber: prefix to access local numbers (also known as trunk-access-code).
In your case0 - make sure Area-Code/Country-Code/Subscriber are set as follows:
- Area-Code: the area code of your trunk line
In countries which do not have area codes (that is, users must always dial full national or international numbers) this field must be left empty!621
- Area-Code: the area code of your trunk line
- Country-Code: the country code of your trunk line.
In your case49 - leave Subscriber as is (empty)
- set Max. length internal number to
7 (so it is consistent with the hard-coded limit implemented in the phone App)
You could also set the Subscriber field to the trunk line's subscriber number (3428231 in our case). However, in many cases this is not necessary (as it mainly inhibits loopback calls to local extensions through the trunk line when a colleague's extension is dialed from a directory) and the Install therefore also does not do it. ... Trying it
Trying it
To verify your phone's LDAP configuration- use your IP111 where John Doe is registered
- do a long press on the
5 (j)
you should see a
search result entry for John Doe (14). This is a result from the PBX LDAP server - clear the j using the backspace key on the upper right
- and press
7 three times (yielding an r)
you should see a
search result entry for Renée-Francois. This is a result from the Contacts App service instance LDAP server
To check the search-api provider from within myApps, we first need to make the phone App available to John Doe (so we can try the search function within):- open John Doe's PBX User record
- switch to the Apps tab
- tick the phone App
now, several Apps representing John Doe's devices are available in the ALL APPS area (POTS phone, Hot Desking and IP111) - start one of your phone apps
- search for both
j andf
Notice that the search for f works
as expected but the search for j does not. John Doe is found by the telephone's LDAP client because visibility through LDAP access is a yes/no configuration in the PBX object (controlled by the Hide from LDAP check-mark which is currently off for John Doe). Visibility through search-api access (which myApps (or more precisely: the phone App) is using) however is controlled by a much more sophisticated privacy mechanism which we need to configure before it works
To configure privacy for John Doe- edit John Doe's profile by starting the Profile App available in the ALL APPS area
- switch to the Privacy tab
- click on + Filter for domain to add a rule for all users in your PBX system
- put
dvl-ckl2.net (your PBX System Name) in to the input field next to the @ - tick the Visible check-mark
This is to say that John Doe is visible to all users in this specific domain. If you like, you can tick all the other privacy options (except for Group, you must not tick this as this is not a privacy option but changes the interpretation of what you have typed in the input field from being a domain name to being a group name) - if you now go back to the phone App and re-run the search for j, it should work
User friendly naming of search API providers
name of the search provider is shown on top. However, the string ContactsApi might not be appropriate for end users.
Fortunately, you can specify an arbitrary name that suits you well by
editing the Display Name property in the ContactsApi PBX object, e.g. Finding search API providers
To make it available to John Doe, we need to
tick the },"@client": {
"title": "myApps",
"url": "http://0090334000b3.local/PBX0/APPCLIENT/1420315/appclient.htm",
"info": {},
"model": {
"relevance": 500
},
"restart": 0},
"devices-api": {"title": "DevicesApi",
"url": "http://apps-dvl-ckl2.training.innovaphone.com/dvl-ckl2.net/devices/innovaphone-devices-api.htm",
"info": {},
"model": {}},
"users-apis": {"title": "UsersApi",
"url": "http://apps-dvl-ckl2.training.innovaphone.com/dvl-ckl2.net/usersapp/innovaphone-usersapis.htm",
"info": {},
"model": {}},
"contacts-api": {"title": "Corporate directory",
"url": "http://apps-dvl-ckl2.training.innovaphone.com/dvl-ckl2.net/contacts/innovaphone-contacts-searchapi.htm",
"info": {},
"model": {}}
The Search App
Yes indeed and it exists: the Search App. Just like the API Monitor this is actually part of the PBX and as such does not need to be installed from the App store.
As before, we simply need to tick the
However, this App is of general use, so in a real-life installation you would probably choose to assign it to the Config User template.
Give it a try and search for
results from 2 search API providers you haven't seen before: myApps and DevicesApi.
You meanwhile know how to give a user friendly name to the DevicesApi search API provider. However, you can't change the name of the myApps provider as there is no corresponding PBX object for it. The Events App
App service instance
To install the Events App service and their instance,
use Christoph's AP app installer- restart the Settings App
- use the Christoph's AP events plugin to create all the App objects in the PBX:
- Events with Name set to
Events and SIP toevents - Alarms with Name set to
Alarms and SIP toalarms - Logging with Name set to
Logging and SIP tologging - Events API with Name set to
Events API and SIP toevents-api
For devices to be able to send such requests, you need to set appropriate credentials in the Christoph's AP events plugin:- click on Events configuration / Change authentication account
- set the Username to something sensible, e.g.
events - set the Password to a secure value, which is
ip411 in the course as you know
Tick the
check-marks in the Apps tab of John Doe's PBX user object. Client side
http:// dns-or-ip-of-your-AP/ System Name of your PBX (i.e. domain)/ name of your Events instance/ followed by one of the following fixed strings:
innovaphone-alarms for events and alarmsinnovaphone-logging for logs
To configure your IP411LEFT to send logs, alarms and events to your new Events service instance- go to
Services / Logging on your IP411LEFT - set some of the properties in both the Log Server and Alarm and Event Forward Server area as follows:
- select
HTTPS for Type - set Address to
apps-dvl-ckl2.training.innovaphone.com - leave Port empty (which defaults to 443 for Type HTTPS)
- select
External (POST) for Method - set User to what you have defined as Username above in the plugin, which is
events - set Password to what you have defined as Password above in the plugin, which is
ip411 - set the Path to
/dvl-ckl2.net/events/innovaphone-logging for the Log Server and - set the Path to
/dvl-ckl2.net/events/innovaphone-alarms for the Alarm and Event Forward Server
In most cases, you will send log messages to the Events services too. However, some installations are using third-party logging services to handle log messages. In this case, you would want to set it differently (and un-tick the
check-mark next to the Logging URL in the Alarm server device configuration so that Devices leaves these settings untouched).Trying it
To verify your configuration- open the
Maintenance / Diagnostics / Logging tab on your IP411LEFT - un-tick all check-marks which may be set so far
- tick the PBX Calls check-mark
- open the Logging App from the ALL APPS area in myApps
- lift the receiver of John Doe's IP111
- hang up again
two log messages
now in the Logging App (or may be three, if you have a left-over search expression in the IP111 before lifting the receiver).The Messages App
App service instance
To install the Messages App service and its instance, - use Christoph's AP app installer
- restart the Settings App
- use the Christoph's AP messages plugin to add all the App objects in the PBX:
- Api with Name set to
MessagesAPI and SIP tomessages-api - Connect with Name set to
Connect and SIP toconnect
For the time being, you can ignore the App available for public access option.
Tick the
check-marks in the Apps tab of John Doe's PBX user object. We only created two App objects (with SIP set to
A mode is an operating mode of an app that usually involves certain access rights. They are defined as a comma-separated list of words in the
Modes field within the Apps tab of the respective App object.
You may ask yourself why we did not assign
Connect's concept article. A 10 minutes Connect crash course
To do so, we need to create a second User PBX object in - Long Name
Lisa Svensson - Name
lisa.svensson - Password
ip411 - Assigned Apps
connect ,messages-api ,profile ,search andusers-apis - active/static group membership in group
group-for-connect - visibility setting for
@dvl-ckl2.net withVisible ticked
Also, - add John Doe as an active/static member to the
group-for-connect group - start Connect as John Doe
finally - open
http://hq-dvl-ckl2.training.innovaphone.com/PBX0/APPCLIENT/appclient.htm?lang=en in a new browser and log in aslisa.svensson with passwordip411
this needs to be a different browser, not just a new browser window or tab. For example, if you use Firefox currently, you could use a Chrome window. If you don't have another browser on your laptop, you can use the native myApps client (you can get it from the
Recommended Tools for this Course page) - start Connect as Lisa Svensson
If you also want some nice avatar images for Lisa and John, you can use these:
Handling posts
In John Doe's Connect, - type a new message in to the Start a new discussion field, say something like
what I always wanted to say
This creates a post which you can reply to - click on the message, then on the
reply-symbol and type do you hear me
Here you have your first thread
right pane of her Connect App. This area where the threads are shown is known as the stream.
Lisa can now like any of John's messages by clicking on the thumbs-up symbol.
left pane of John's Connect App, notifying him that something worth noting happened. This area where the threads are shown is known as the feed. Also, a little counter (known as a badge-count) appears at the top of the Connect icon. So John would notice the news even if he is not using Connect at the same time. Following
If John wants to make sure that Lisa notice his message soon, - he can edit one of his messages
- and add the text
@lisa.svensson to it
In this case, Lisa can follow John. On Lisa's Connect App- go to More / USERS
- click on
John Doe - click on the bell-symbol next to John Doe's avatar picture
- click More / FOLLOWING. You will see that John Doe is in the list of people Lisa is following
- switch to John Doe's Connect App and post a new message with content
no at
appear in Lisa's feed and the badge-count will be set to 2.Mentioning groups
Groups in Connect are defined by the groups in the PBX. All active members of a group are will be considered by Connect when addressing with @@group.
You can try this with Zones
In John's Connect App- click on the burger menu (upper right)
This is where user settings for ordinary users can be found. However, users with admin rights (those that have connect~admin assigned in their Apps tab) can access administrative functions here - then select Zones
you will see a list of existing zones with the entries Connect and John Doe - click on Add a zone to create a new zone
- set Display name to
Coffee gossip - set Name to
coffee-gossip - and finally set App id to
connect
new zone where people can indulge in coffee gossip (actually a sub-zone to the default zone which is known as Connect).
To do so, proceed as follows:- click on the new zone entry (the zone editor pops up)
- click the Add a group button (a list of group names shows up in the list field labeled Group)
- optionally type the prefix of a group name (e.g. group-for-connect) to filter the group list
- click on the group you want to add (
group-for-connect in our case) to
add the group to the new zone (no need to tick the Administrator check-mark now)
Instead of explicitly adding users and groups to a zone, you can also set no groups and users at all. If the access rights list is empty, all users have access. More on zones
To create a zone for the Profile App- open the App object for Profile in the PBX
- switch to the Apps tab
- tick the
connect check-mark
For speed, the Connect App caches a number of things that usually don't change frequently. As a result, you may sometimes need to restart the application to see changes.Home
Let's set the gossip zone as Lisa's main page:- in Lisa's Connect App, click on MORE
- select Zones
- click on the Coffee gossip zone (if it doesn't show up in the list, restart Connect as dicussed in the previous chapter)
- the zone now shows up above the list with 3 dots to the right
- click on the 3 dots
- select Pin to home
- Connect switches to the HOME area, the zone is now in your list
- click on Coffee gossip in the list
- click on the 3 dots
- select Set as main page
The icon next to the zone's name changes to a house-symbol.
Hashtags
Post a message (in zone Connect) in a new discussion (a.k.a thread) with content
A bit more interesting is that you can also put a hashtag on your home page:- click on MORE / TAGS
- click on
party-of-the-week . If more than one tag shows up above the list, remove the others by clicking on the cross symbol - on the three dots select Pin to home
- switch to the HOME area
Hashtags can consist of any character except . : ; , < & ' # ) ( and white space. If a hashtag shall include one of these characters, you must enclose it in quotation marks, such as in #"Christoph's tag".Channels
- They have agreed to use the hashtag #weekly-meeting for posts about this meeting. This is used for several types of posts that are related to that particular regular meeting, such as meeting minutes, agenda items, and other discussions
- So they have also agreed to use the hashtag #agenda for agenda items.
- To identify items that have not yet been discussed, they use the hashtag #open
Have Lisa post a message with content
Now, to fix that, Lisa does the following:- in the MORE / TAGS list, she clicks on
weekly-meeting - using the 3 dots, she selects Create channel
- and creates a new channel with Name set to
Weekly Meeting and Description set toLisa and John use this to discuss their work items on a weekly basis. - she switches to the CHANNELS area and clicks on #weekly-meeting (or Weekly Meeting). The tag is now shown in top of the home page
- using the 3 dots next to it, she
selects Pin channel
appears in the list of items on the home page. It might be a bit confusing that you have to select the hashtag (#weekly-meeting) to pin the channel and then, the name you defined for the channel (Weekly Meeting) is shown in the list.
To support the management of agenda items, Lisa additionally does the following:- in the MORE / TAGS list, she clicks on
weekly-meeting ,agenda andopen
The 3 tags accumulate on the top of the list - using the 3 dots, she selects Create channel
- and creates a new channel with name
Things to discuss - and finally uses Pin channel to put the channel on her home page
Select the Things to discuss channel (either from HOME or from CHANNELS) and post a new message with content
Finally after the meeting, when the issue has been discussed, - she edits the post
- writes a summary and
removes the #open hashtag by clicking on it underneath the text box (it will be striked out then)
part of the Weekly Meeting channel).Search
search for messages
in Connect. Can you see what a powerful App Search is?
While we are at that: do you remember how to give a user friendly name to the MessagesAPI search API provider?
Of course, there is also a search function within Connect. You can search for words where multiple words match if a post includes all the words. You can enclose strings in quotation marks to search for these exact strings.Chat
Non-persistant chat
chat option available when assigning Apps to users (or templates). This refers to a separate App built-in to the PBX (that is: no need to install an App service on your App platform). - no persistent storage of messages
- no offline delivery of chat messages (that is: you can't send messages to users who have no myApps running at that time)
- no attachments with messages
- no group chats
If a user has the More administrator stuff
The Translations App
To proceed with this chapter, you will need to obtain a (free) Deepl API key as outlined below. If this is not possible for you, you may skip all the practical exercises (those marked with this symbol:
). Obtaining the API key
To obtain a free DeepL API key, follow the steps outlined in App and Instance
To provide the translation service from the App platform proceed as follows:- install the Translations App using the App installer
- use the corresponding Settings plugin to create the App object (use
Translations API as Name andtranslations-api as SIP) - also provide the API key you have received from DeepL
Allowing translations-api
To make sure both Lisa and John can use the translation feature, proceed as follows:- assign the
translations-api App to Lisa Svensson - assign the
translations-api App to John Doe
Use of the tanslation api
"com.innovaphone.translate": {"translations-api": {"title": "Translations API","url": "https://apps-dvl-ckl2.training.innovaphone.com/dvl-ckl2.net/translations/innovaphone-translations-api.htm","info": {},"model": {}}},
To see how that works, do this:- as John Doe, select the Weekly Meeting stream
- reply to Lisa's agenda post with the text
???????????????????
if you have translations in moodle turned on, then please turn it off before copying this text. This is an issue in the moodle translation feature that garbles non-ISO8859-1 text - as Lisa Svensson, open this post
- note that there now is a Translate button
- click on the button and
see the translation
The virtual background App
"com.innovaphone.virtualbackground": {"virtualbackground": {"title": "Virtual Background","url": ""http://apps-dvl-vgr.training.innovaphone.com/dvl-vgr.net/virtualbackground/innovaphone-virtualbackground.htm","info": {"config": "innovaphone.virtualbackground.config.mjs"},"model": {}}},
- the Virtual Background App and an instance of it must be installed
- the App object must be created (
Virtual Background /virtualbackground ) - and the user must have the App assigned
- the using App may also require you to enable use of the function (for example, the phone or softphone App require you to
select the background mode)
Make sure both Lisa and John use the Blur background mode in their phone App. Let's Encrypt
So go ahead and install the App service along with its first instance from the App Store.
official home page.Service configuration
To configure the Connector for Let's Encrypt App service:- download and install the Connector for Let's Encrypt via the app installer
- re-start the Settings App plugin
A new item Christoph's AP letsencrypt appears - open the plugin and switch to the Settings
- tick the Enable check-mark
- change the Let's encrypt directory URL from its default (which is https://acme-v02.api.letsencrypt.org/directory) to the staging service URL
https://acme-staging-v02.api.letsencrypt.org/directory
Of course, in a real-life situation you would not do this. However, here in the training, you don't want to create and subscribe real certificates. This is just for playing around with them and for this, the staging directory is exactly the way to go - agree to the subscriber agreement
- set the Client password to
ip411ip411 and take note of it (a strict policy here does not allow our usual friend ip411). You will need it later on each device you want a certificate for
Again, in a real-life situation, you would use a secure password - you can leave the Certificate Installation before expiry (days) as is (the default is 3)
- take note of both the Client URL and the URL for Let's Encrypt root certificates. You will need them later on each device you want a certificate for
Trust
TLS Handshake
- Establish a TCP connection to the server
- Obtain a certificate from the server
- Verify that the certificate is from a trusted source
- Verify that the subject name (or SAN) of the certificate matches the client's expectation
- Start the data conversation
Note that some of steps 3 and 4 may be omitted at the client's discretion.
three entries:- innovaphone Device Certification Authority
- innovaphone Device Certification Authority 2
- *.innovaphone.com
Note that these entries to the trust list are installed as part of the firmware. the first two certificates change rarely (in fact, the current ones are valid until end of 2047). The *.innovaphone.com certificate is being renewed each year. So if you updated a device from an older firmware, you might see multiple versions of it,
all but 1 of them probably expired.
issued by innovaphone Device Certification Authority 2 which is mentioned in the trust list. If we enable the LE client on the IP411LEFT, the TLS connection attempt from the PBX to the AP would pass step 1 (connect), 2 (obtain certifictate) and 3 (verify trusted source) above. - configure the App service instance (already done)
- configure the AP's LE client
- wait for the new AP certificate to appear
- configure the IP411LEFT's LE client
- wait for the untrusted certificate to appear in the list of Rejected certificates
- from there, add it to the trust list (the IP411LEFT LE client can now connect to the AP)
- wait for the new device certificate to appear
When you are using the Devices App (which you should do of course
list of Sources for certificates in the Certificates device configuration settings. Requesting a certificate for your AP
see in the AP's Settings / Security menu (accessible from the Burger menu), your AP still has the hard-wired default certificate installed.
To change that, we need to configure the Let's Encrypt client on the AP as follows- go to Settings / Let's Encrypt (accessible from the burger menu)
- tick the Enable check-mark
- set the Let's Encrypt App URL to the service URL of your Connector for Let's Encrypt App instance:
wss://apps-dvl-ckl2.training.innovaphone.com/dvl-ckl2.net/letsencrypt/clients
You can copy this
from the Client URL field in the Christoph's AP letsencrypt Settings App plugin - set the Let's Encrypt App Password to the value you have set as Client password in the Let's Encrypt App service instance configuration (didn't you take note of it? never mind, it is
ip411ip411 ) - never touch the Key length (bit) (which defaults to 2048 bits) unless you really know what you do
This is because changing the certificate's key length to a higher value would impact the performance of your system significantly, as it slows down each and any TLS connection establishment - set the DNS name(s) to the DNS name of your AP:
apps-dvl-ckl2.training.innovaphone.com
We could add more DNS names here which would appear as subject alternate name (SAN) in the certificate issued by LE
The DNS name must be functional in your DNS system and must point to a device that allows external TCP access to the device for which the certificate is intended on port 80 (HTTP). LE will use this DNS to connect to it, thus verifying that you are the owner of this DNS domain. In practice, this will probably be your Internet router with port forwarding or a reverse proxy.It's a good time to have a cup of coffee now (well then, perhaps better an even quicker espresso) until you see the
new device certificate appearing in burger menu / Settings / Security.
It is essential that you first acquire the LE certificate for the AP. This is because access to the AP is required for all other devices in order to obtain a certificate from LE. For this to work, you need to trust the AP's certificate (and hence LE's certificates). This can only be done once you have configured the LE client on the AP. Requesting a certificate for your IP411LEFT
On - tick the Enable check-mark
- set the Let's Encrypt App URL to the value shown as Client URL in the Let's Encrypt App service instance configuration (didn't you take note of it? never mind, here it is
wss://apps-dvl-ckl2.training.innovaphone.com/dvl-ckl2.net/letsencrypt/clients ) - set the Let's Encrypt App Password to the value you have set as Client password in the Let's Encrypt App service instance configuration (didn't you take note of it? never mind, it is
ip411ip411 ) - never touch the Key length (which defaults to 2048 bits) unless you really know what you do
This is because changing the certificate's key length to a higher value would impact the performance of your system significantly, as it slows down each and any TLS connection establishment - set the DNS name to the DNS name of your PBX:
hq-dvl-ckl2.training.innovaphone.com
The DNS name is the same as you have set as DNS on PBX/Config/General. Again, it must point to a device that allows external access to the PBX.
listed in the Rejected certificates section in General/Certificates.
To fix this situation, we must add the LE root certificate to our trust list. You will probably see two certificates: apps-dvl-ckl2.training.innovaphone.com and (STAGING) Wannabe Watercress R11 (or something similar, LE is using several root certificates). Although you could add the first certificate and it would work, we recommend to
add the LE root certificate to the trust list. This will be the last entry in the list of rejected devices right now. This will trust all certificates that are issued by this root certificates.
new device certificate issued by LE.
We recommend to add it's root certificate to the trust list as before.
You will notice that both accessing the IP411LEFT and accessing the AP from the browser (i.e. from within myApps) requires you to accept a security warning from your browser.This is because the certificate issued by LE is not a true good&trusted certificate. It would be if we hadn't specified the staging URL to the Let's encrypt directory.
Deploying the LE root using Devices
the URL for Let's Encrypt root certificates (which you find in
the AP letsencrypt Settings App plugin) into the list of Sources for certificates in a Certificates configuration job in the Devices app. 


as group heading.