WikiPBX has a fairly major "Design Issue" that is bound to come up in discussions, and so I want to document it here so people can understand the issue.
The "standard" way for people to do multi-tenants with freeswitch is to let all tenants use the same profile(s), such as the default config internal and external profiles, and have everything partitioned by domain. So if a call comes in on foo.com on port 5060, then it will go into a dialplan for the "foo.com" tenant. Likewise if a call comes in on bar.com on port 5060, it will go into the dialplan for the "bar.com" tenant. The point is that they both live on the same port (and therefore profile), but have completely different dialplans. These two tenants could also live on more profiles, such as the external profile on port 5080.
The way WikiPBX does it is much differently. Every tenant gets their own SIP Profile and the partitioning of dialplans and so forth is done based on profile. When freeswitch asks WikiPBX what to do for a particular extension, WikiPBX checks the sip port, which is uniquely mapped to a profile, and then knows which tenant to use, and looks up that tenant's dialplan in the database. So the "foo.com" tenant gets port 5060 and a profile named "foo.com", the "bar.com" tenant gets port 5061 and a profile named "bar.com", and so on for each tenant ..
The consequences is that in certain things, like mod_voicemail, WikiPBX cannot integrate nicely with freeswitch.
The long-term plan is to switch everything over to domain-based multi-tenancy, and either offer an option to stick with profile based multi-tenancy, or just throw that approach away altogether.





