> For the complete documentation index, see [llms.txt](https://multisource.gitbook.io/multisource-api/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://multisource.gitbook.io/multisource-api/integration/call-lookup/3cx-integration.md).

# 3CX-Integration

Verbinden Sie Call Lookup mit **3CX**, damit bei eingehenden Anrufen automatisch Name, Firma des Anrufers im 3CX Web Client sowie in der Desktop- und Mobile-App angezeigt werden.

### Voraussetzungen

* Ihre 3CX-Lizenz muss CRM-Integrationen enthalten. Falls unter **Integrationen → CRM** kein Bereich zum Hochladen einer Vorlage erscheint, ist dieses Feature in Ihrem aktuellen 3CX-Plan nicht enthalten – prüfen Sie in diesem Fall bei 3CX oder Ihrem 3CX-Partner, welche Lizenzstufe benötigt wird.
* Funktioniert identisch in allen 3CX-Deployment-Modellen – **on-premise**, **self-hosted** (Azure, AWS, Google Cloud, DigitalOcean) und **Hosted by 3CX**.
* Ein gültiger multisource•api **Auth-Key**.

### Funktionsweise

3CX unterstützt eigene CRM-Integrationen über eine serverseitige XML-Vorlage. Diese Vorlage teilt 3CX mit, welche URL für die Nummer eines eingehenden Anrufers abgefragt werden soll, und wie die JSON-Antwort auf die integrierte Kontaktkarte von 3CX abgebildet wird. Ein externer Dienst oder Proxy ist dafür nicht nötig – 3CX ruft die multisource•api direkt auf.

### Installation

1. Gehen Sie in der 3CX Admin-Konsole zu **Integrationen → CRM**.
2. Klicken Sie auf **+ Vorlage hinzufügen** und laden Sie die untenstehende Vorlagendatei hoch.
3. Wählen Sie **multisource Call Lookup** aus dem Dropdown "CRM-Lösung wählen".
4. Tragen Sie Ihren multisource•api Auth-Key ein.
5. Klicken Sie auf **Speichern**.
6. Testen Sie die Integration über den eingebauten **TEST**-Button mit einer Telefonnummer, die auf search.ch oder local.ch gelistet ist. Beispiel: 0800 86 80 86

![](/files/VDD9Tjl5vWqtYvCc75T4)![](/files/sJtH0WT1z4kZ2P1gHKC1)

### Template

{% file src="/files/3n3OIQ3TFzL9ndGPNFyx" %}

```xml
<?xml version="1.0"?>
<Crm xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Country="CH" Name="multisource Call Lookup" Version="1" SupportsEmojis="false">
<Number Prefix="AsIs" MaxLength="15" />
<Connection MaxConcurrentRequests="5" />
<Parameters>
<Parameter Name="ApiKey" Type="Password" Parent="General Configuration" Editor="String" Title="multisource API Key (Auth-Key):" Validation="" Default="" ListValues="" RequestUrl="" RequestUrlParameters="" ResponseScenario="" />
</Parameters>
<Authentication Type="No" />
<Scenarios>
<Scenario Id="" Type="REST" EntityId="" EntityOrder="">
<Request SkipIf="" Url="https://api.multisource.ch/v2/search/calllookup?number=[Number]" MessagePasses="0" Message="" RequestContentType="" RequestEncoding="UrlEncoded" RequestType="Get" ResponseType="Json">
<Headers>
<Value Key="Auth-Key" Passes="0" Type="String">[ApiKey]</Value>
</Headers>
</Request>
<Rules>
<Rule Type="Any" Ethalon="">result.data.dwhId</Rule>
</Rules>
<Variables>
<Variable Name="ContactID" LookupValue="" Path="result.data.dwhId">
<Filter />
</Variable>
<Variable Name="FirstName" LookupValue="" Path="result.data.firstname">
<Filter />
</Variable>
<Variable Name="LastName" LookupValue="" Path="result.data.name">
<Filter />
</Variable>
<Variable Name="Company" LookupValue="" Path="result.data.companyname">
<Filter />
</Variable>
<Variable Name="Email" LookupValue="" Path="result.data.email">
<Filter />
</Variable>
<Variable Name="MobileFirst" LookupValue="" Path="result.data.mobileNumbers">
<Filter>
<Rule Type="Number">result.data.mobileNumbers</Rule>
</Filter>
</Variable>
<Variable Name="PhoneFirst" LookupValue="" Path="result.data.phoneNumbers">
<Filter>
<Rule Type="Number">result.data.phoneNumbers</Rule>
</Filter>
</Variable>
</Variables>
<Outputs Next="" AllowEmpty="false">
<Output Type="FirstName" Passes="0" Value="[FirstName]" />
<Output Type="LastName" Passes="0" Value="[LastName]" />
<Output Type="CompanyName" Passes="0" Value="[Company]" />
<Output Type="Email" Passes="0" Value="[Email]" />
<Output Type="ContactUrl" Passes="0" Value="[ContactID]" />
<Output Type="PhoneMobile" Passes="0" Value="[IIf([MobileFirst]!=&quot;&quot;,[Number],&quot;&quot;)]" />
<Output Type="PhoneBusiness" Passes="0" Value="[IIf([MobileFirst]==&quot;&quot;,[Number],&quot;&quot;)]" />
</Outputs>
</Scenario>
</Scenarios>
</Crm>
```

### Feld-Mapping

| 3CX-Feld                        | multisource•api-Quelle           | Hinweis                                                                                                                                  |
| ------------------------------- | -------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
| `FirstName`                     | `firstname`                      |                                                                                                                                          |
| `LastName`                      | `name`                           |                                                                                                                                          |
| `CompanyName`                   | `companyname`                    |                                                                                                                                          |
| `Email`                         | `email`                          |                                                                                                                                          |
| `ContactUrl`                    | `dwhId`                          | Eindeutige ID des Eintrags bei multisource•api.                                                                                          |
| `PhoneMobile` / `PhoneBusiness` | `mobileNumbers` / `phoneNumbers` | Die Vorlage prüft, in welchem Array die tatsächlich gesuchte Nummer enthalten ist, und mappt sie entsprechend auf das passende 3CX-Feld. |

### Bekannte Einschränkungen

Folgende Einschränkungen in 3CX sind bekannt:

* **Keine Adressfelder.** Die Kontaktkarte von 3CX für Telefon-Lookups kennt grundsätzlich keine Felder für Strasse/PLZ/Ort – `street`, `houseNumber`, `zip` und `location` aus der API-Antwort lassen sich nirgends im Anruf-Popup anzeigen.
* **Keine explizite Person/Firma-Kennzeichnung.** Dieser Wert wird intern von 3CX berechnet und lässt sich über die Vorlage nicht überschreiben. In der Praxis spielt das keine Rolle: Bei einem privaten Treffer sind `FirstName`/`LastName` gefüllt, bei einem Firmentreffer `CompanyName` – und 3CX zeigt das entsprechend an.
