> For the complete documentation index, see [llms.txt](https://multisource.gitbook.io/api-dintegration-multisource/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/api-dintegration-multisource/integration/call-lookup/integration-3cx.md).

# Intégration 3CX

Connectez **Call Lookup** à 3CX afin que, lors d'un appel entrant, le nom et l'entreprise de l'appelant s'affichent automatiquement dans le Web Client 3CX ainsi que dans les applications de bureau et mobiles.

### Prérequis

* Votre licence 3CX doit inclure les intégrations CRM. Si aucune zone de téléchargement de modèle n'apparaît sous **Integrations → CRM**, cette fonctionnalité n'est pas incluse dans votre offre 3CX actuelle – vérifiez dans ce cas auprès de 3CX ou de votre partenaire 3CX quel niveau de licence est requis.
* Fonctionne à l'identique sur tous les modes de déploiement 3CX – **on-premise**, **self-hosted** (Azure, AWS, Google Cloud, DigitalOcean) et **Hosted by 3CX**.
* Une **clé Auth-Key** multisource•api valide.

### Fonctionnement

3CX prend en charge les intégrations CRM personnalisées via un modèle XML côté serveur. Ce modèle indique à 3CX quelle URL interroger pour le numéro d'un appelant entrant, et comment mapper la réponse JSON sur la fiche de contact intégrée de 3CX. Aucun service externe ni proxy n'est nécessaire – 3CX appelle directement l'API multisource•api.

### Installation

1. Dans la console d'administration 3CX, allez sous **Integrations → CRM**.
2. Cliquez sur **+ Add Template** et téléchargez le fichier modèle ci-dessous.
3. Sélectionnez **multisource Call Lookup** dans le menu déroulant "CRM-Lösung wählen".
4. Saisissez votre clé Auth-Key multisource•api.
5. Cliquez sur **Speichern**.
6. Testez l'intégration à l'aide du bouton **TEST** intégré, avec un numéro de téléphone répertorié sur search.ch ou local.ch. Exemple : 0800 86 80 86

![](/files/4VfCtHHmpiXJllJSa8Bb)![](/files/zEZM54Z5dTlVerM2xWOx)

### Template

{% file src="/files/UxsrquYN144p7khScyKB" %}

```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>
```

### Mapping des champs

| Champ 3CX                       | Source multisource•api           | Remarque                                                                                                                  |
| ------------------------------- | -------------------------------- | ------------------------------------------------------------------------------------------------------------------------- |
| `FirstName`                     | `firstname`                      |                                                                                                                           |
| `LastName`                      | `name`                           |                                                                                                                           |
| `CompanyName`                   | `companyname`                    |                                                                                                                           |
| `Email`                         | `email`                          |                                                                                                                           |
| `ContactUrl`                    | `dwhId`                          | ID unique de l'entrée chez multisource•api.                                                                               |
| `PhoneMobile` / `PhoneBusiness` | `mobileNumbers` / `phoneNumbers` | Le modèle vérifie dans quel tableau figure le numéro effectivement recherché, et le mappe sur le champ 3CX correspondant. |

### Limitations connues

Les limitations suivantes sont connues dans 3CX :

* **Aucun champ d'adresse.** La fiche de contact de 3CX pour les recherches par numéro ne prévoit aucun champ pour la rue, le NPA ou la localité – `street`, `houseNumber`, `zip` et `location` de la réponse API ne peuvent être affichés nulle part dans la fenêtre d'appel.
* **Aucune distinction explicite particulier/entreprise.** Cette valeur est calculée en interne par 3CX et ne peut pas être définie via le modèle. En pratique, cela n'a pas d'incidence : pour une correspondance privée, `FirstName`/`LastName` sont renseignés, pour une correspondance d'entreprise c'est `CompanyName` – et 3CX l'affiche en conséquence.
