samdock ist ein webbasiertes CRM-System speziell für kleinere Unternehmen mit Fokus auf einfach Usability und wird in München entwickelt. Auch wenn samdock eine REST-API hat, eignet sie sich leider nicht für die CRM-Integration von 3CX. Wir haben ein kleines PowerShell-Skript erstellt, mit dem Sie einfach Ihre Kontakte von samdock in die 3CX übertragen können. Dabei hat diese Variante sogar noch den Vorteil, dass die Kontakte schon direkt in der 3CX vorhanden sind und schon beim ersten Call die Informationen angezeigt werden. Auch die Kontakt-URL wird übertragen. So könnt ihr direkt den Kontakt bei Anrufannahme öffnen lassen oder selber über das Kontakt-Icon öffnen.
Im Übrigen kann man das Skript natürlich auf diverse andere Systeme adaptieren. Es müsste auch nicht Powershell sein. Die einzige Voraussetzung ist ein selbstgehosteter 3CX-Server, da nur hier der Zugriff auf die CallControl API verfügbar ist.
Uns so sieht das Skript aus:
#Variables
$samdock_user = [System.Web.HttpUtility]::UrlEncode('ihreemailbeisamdock') #Anpassen
$samdock_password = [System.Web.HttpUtility]::UrlEncode('ihrpasswordbeisamdock') #Anpassen
#Add 3CX DLL
$path="C:\Program Files\3CX Phone System\Bin\3cxpscomcpp2.dll"
Add-Type -Path $path
#Connect to 3CX App
$ps = [TCX.Configuration.PhoneSystem]
$ps::CfgServerHost = "127.0.0.1"
$ps::CfgServerPort = 5485
$ps::CfgServerUser = "sieheanmerkung" #Anpassen
$ps::CfgServerPassword = "sieheanmerkung" #Anpassen
$ps::ApplicationName = "My3CXsamdockApp"
$t = $ps::Root.GetTenants()[0]
#Get samdock API Token
$headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
$headers.Add("Content-Type", "application/x-www-form-urlencoded")
$body = "email=$samdock_user&password=$samdock_password"
$response_token = Invoke-RestMethod 'https://auth.samdock.app/login' -Method 'POST' -Headers $headers -Body $body
$response_token | ConvertTo-Json
$accesstoken = $response_token.accessToken
$headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
$headers.Add("Accept", "application/json")
$headers.Add("Authorization", "Bearer $accesstoken")
#Get samdock Persons
$response_persons = Invoke-RestMethod 'https://samdock.app/api/contacts/Persons' -Method 'GET' -Headers $headers
$response_persons | ConvertTo-Json -Depth 5
#Get samdock Companies
$response_companies = Invoke-RestMethod 'https://samdock.app/api/contacts/Organizations' -Method 'GET' -Headers $headers
$response_companies | ConvertTo-Json -Depth 5
#Remove all 3CX CRM Contacts
foreach($i in $t.GetPhoneBookEntries()){
if($i.Tag -match "[samdock]"){
$i.Delete()
}
}
#Add samdock Persons to 3CX
foreach($i in $response_persons|where {$_.phoneNumber -ne $empty -or $_.mobileNumber -ne $empty}){
$id = $i._id
$firstname = $i.firstName
$lastname = $i.lastName
$email = $i.email
$phone = $i.phoneNumber
$mobile = $i.mobileNumber
$company = ($response_companies|where {$_._id -eq $i.employers._organizationID}).name
$logo = ($response_companies|where {$_._id -eq $i.employers._organizationID}).logo
$phonebook_entry = $t.CreatePhoneBookEntry()
$phonebook_entry.CrmContactData = [string]"https://samdock.app/contacts/persons/$id/activities"
$phonebook_entry.FirstName = [string]"$firstname"
$phonebook_entry.LastName = [string]"$lastname"
$phonebook_entry.AddressNumberOrData3 = [string]"$phone"
$phonebook_entry.PhoneNumber = [string]"$mobile"
$phonebook_entry.CompanyName = [string]"$company"
$phonebook_entry.AddressNumberOrData5 = [string]"$email"
$phonebook_entry.ContactImage = [string]"$logo"
$phonebook_entry.Tag = [string]"[CRM][samdock]"
$phonebook_entry.Save()
}
#Add samdock Companies to 3CX
foreach($i in $response_companies|where {$_.phoneNumber -ne $empty}){
$id = $i._id
$email = $i.email
$phone = $i.phoneNumber
$fax = $i.faxNumber
$company = $i.name
$logo = $i.logo
$phonebook_entry = $t.CreatePhoneBookEntry()
$phonebook_entry.CrmContactData = [string]"https://samdock.app/contacts/organizations/$id/dashboard"
$phonebook_entry.AddressNumberOrData3 = [string]"$phone"
$phonebook_entry.CompanyName = [string]"$company"
$phonebook_entry.AddressNumberOrData5 = [string]"$email"
$phonebook_entry.ContactImage = [string]"$logo"
$phonebook_entry.Tag="[CRM][samdock]"
$phonebook_entry.Save()
}
#Disconnect 3CX App
$ps::Root.Disconnect()
Anmerkung: Sie müssen zum einen noch Ihren Benutzernamen und Ihr Kennwort für samdock eintragen und zudem die Anmeldedaten für die 3CX. Wo Sie diese finden, erfahren Sie auf folgender Seite: https://sipip.de/blog/infos/60-3cx-automatisieren-mit-powershell-und-der-call-control-api. Sie können das Skript für Ihre Telefonanlage frei verwenden. Das Skript darf jedoch nicht in irgendeiner Weise veröffentlicht werden. Verlinken Sie stattdessen bitte diesen Artikel. Bitte beachten Sie auch, dass wir keinen Support für das Skript geben und die Ausführung des Skriptes auf eigene Gefahr erfolgt. Das Skript kann nur auf 3CX Telefonnalgen ausgeführt werden, die auf einem eigenen Server laufen und erfordert mindestens eine Professional-Edition.
Um das Skript regelmäßig laufen zu lassen, erstellen Sie einfach eine geplante Aufgabe in Windows oder einen Cronjob oder Linux.