Mit dem SDK für Calling-Erweiterungen können Apps HubSpot-Benutzern direkt von einem CRM-Datensatz aus eine benutzerdefinierte Calling-Option zur Verfügung stellen, ähnlich wie bei dem von HubSpot bereitgestellten Tool Calling. Wenn ein Benutzer mit Ihrer App eine Anruf vornimmt, erstellt HubSpot eine Interaktion auf der Aktivitätenchronik des CRM-Datensatzes und tauscht dann Daten mit Ihrer App aus, um die Details einzupflegen.Eine Calling-Erweiterung besteht aus drei Hauptelementen:
Das SDK für Calling-Erweiterungen, ein JavaScript-SDK, das die Kommunikation zwischen Ihrer App und HubSpot ermöglicht.
Die Anrufeinstellungen-Endpunkte, die verwendet werden, um die Anrufeinstellungen für Ihre App festzulegen. Jeder HubSpot-Account, der mit Ihrer App verknüpft wird, verwendet diese Einstellungen.
Das Calling-iframe, in dem Ihre App für HubSpot-Benutzer angezeigt und mit den Anrufeinstellungen konfiguriert wird.
Sie können das SDK für Calling-Erweiterungen mit zwei verschiedenen Demo-Apps testen:
Die demo-minimal-js bietet eine minimale Implementierung des SDK mit JavaScript, HTML und CSS. Zeigen Sie an, wie das SDK in index.js instanziiert wird.
Die demo-react-ts bietet eine praktische Implementierung des SDK mit React, TypeScript und Styled Components, um als Blaupause für Ihre App zu fungieren. Zeigen Sie an, wie das SDK in useCti.ts instanziiert wird.
Klonen Sie die ZIP-Datei dieses Repositorys, spalten Sie sie ab oder laden Sie sie herunter.
Öffnen Sie Ihren Terminal und wechseln Sie zum Stammverzeichnis des Projekts.
Führen Sie einen der folgenden Befehle aus:
Für demo-minimal-js:
Falschen Code melden
Kopieren
KI fragen
cd demos/demo-minimal-js && npm i && npm start
Für demo-react-ts:
Falschen Code melden
Kopieren
KI fragen
cd demos/demo-react-ts && npm i && npm start
Diese wechseln zum gewünschten Demo-Verzeichnis, installieren die für das Projekt erforderlichen Node.js-Abhängigkeiten mithilfe des npm CLI und starten die App.
Der Befehl npm start öffnet automatisch eine neue Registerkarte in Ihrem Browser unter https://localhost:9025/, und Sie müssen möglicherweise eine Warnung vom Typ „Ihre Verbindung ist nicht sicher“ umgehen, um auf die Anwendung zugreifen zu können.
Aktualisieren Sie die Seite und klicken Sie auf das Telefon-Symbol in der linken Seitenleiste. Klicken Sie auf das Dropdown-Menü Anrufen über und wählen Sie den Namen der Demo-App aus Schritt 2 aus (z. B. Demo-App Local, Demo-App JS, Demo-App React).
Klicken Sie auf Anrufen, um zu sehen, wie sich die Demo-App über das SDK für Calling-Erweiterungen in HubSpot integrieren lässt. Sie können auch die Events anzeigen, die in der Entwicklerkonsole Ihres Browsers protokolliert werden.
Das SDK für Calling-Erweiterungen stellt eine einfache API für HubSpot und eine Anruf-App zum Austausch von Nachrichten bereit. Die Nachrichten werden über Methoden gesendet, die vom SDK bereitgestellt werden, und über eventHandlers empfangen. Eine vollständige Liste der verfügbaren Events finden Sie im Abschnitt „Events“.Im Folgenden werden die Events beschrieben:
Nummer wählen: HubSpot sendet das Nummer-wählen-Event.
Ausgehender Anruf gestartet: Die App benachrichtigt HubSpot, wenn der Anruf gestartet wird.
Interaktion erstellen: HubSpot erstellt eine Anrufinteraktion mit minimalen Informationen, wenn dies von der App angefordert wird.
Interaktion erstellt: HubSpot hat eine Interaktion erstellt.
Interaktions-ID an App gesendet: HubSpot sendet die engagementId an die App.
Anruf beendet: Die App benachrichtigt, wenn der Anruf beendet ist.
Anruf abgeschlossen: Die App benachrichtigt, wenn der Benutzer mit dem App-Nutzerlebnis fertig ist.
Interaktion aktualisieren: Die App ruft die Interaktion anhand der engagementId ab und führt dann eine Zusammenführung durch und aktualisiert die Interaktion mit zusätzlichen Anrufdetails. Erfahren Sie mehr über das Aktualisieren einer Anrufinteraktion über die APIoder über das SDK.
Erstellen Sie zunächst eine Instanz des CallingExtensions-Objekts. Sie können das Verhalten Ihrer Erweiterung definieren, indem Sie das Objekt einer Option angeben, wenn Sie Ihre Erweiterungeninstanz erstellen. Das Objekt dieser Option stellt ein eventHandlers-Feld bereit, in dem Sie das Verhalten Ihrer Erweiterung angeben können. Der folgende Code-Block veranschaulicht die verfügbaren Optionen und Event-Handler, die Sie definieren können:
Falschen Code melden
Kopieren
KI fragen
import CallingExtensions from "@hubspot/calling-extensions-sdk";const options = { /** @property {boolean} debugMode - Whether to log various inbound/outbound debug messages to the console. If false, console.debug will be used instead of console.log */ debugMode: boolean, // eventHandlers handle inbound messages eventHandlers: { onReady: () => { /* HubSpot is ready to receive messages. */ }, onDialNumber: event => { /* HubSpot sends a dial number from the contact */ }, onCreateEngagementSucceeded: event => { /* HubSpot has created an engagement for this call. */ } onEngagementCreatedFailed: event => { /* HubSpot has failed to create an engagement for this call. */ } onUpdateEngagementSucceeded: event => { /* HubSpot has updated an engagement for this call. */ }, onUpdateEngagementFailed: event => { /* HubSpot has failed to update an engagement for this call. */ } onVisibilityChanged: event => { /* Call widget's visibility is changed. */ } }};const extensions = new CallingExtensions(options);
Um den Calling-Erweiterungen-iFrame für Endbenutzer zu starten, benötigt HubSpot die folgenden iFrame-Parameter.
Falschen Code melden
Kopieren
KI fragen
{ name: string /* The name of your calling app to display to users. */, url: string /* The URL of your calling app, built with the Calling Extensions SDK */, width: number /* The iFrame's width */, height: number /* The iFrame's height */, isReady: boolean /* Whether the widget is ready for production (defaults to true) */, supportsCustomObjects : true /* Whether calls can be placed from a custom object */}
Senden Sie mit Ihrem API-Tool (z. B. Postman) die folgende Payload an die Einstellungen-API von HubSpot. Stellen Sie sicher, dass Sie die APP_ID Ihrer Anruf-App und Ihrer App abrufen DEVELOPER_ACCOUNT_API_KEY.
Das isReady-Flag zeigt an, ob die App für die Produktion bereit ist. Dieses Flag sollte während des Testens auf false festlegt sein.
Falschen Code melden
Kopieren
KI fragen
# Example payload to add the call widget app settingscurl --request POST \ --url 'https://api.hubapi.com/crm/v3/extensions/calling/APP_ID/settings?hapikey=DEVELOPER_ACCOUNT_API_KEY' \ --header 'accept: application/json' \ --header 'content-type: application/json' \ --data '{"name":"demo widget","url":"https://mywidget.com/widget","height":600,"width":400,"isReady":false}'# Note that this endpoint also supports PATCH, GET and DELETE
Ihre Erweiterungseinstellungen mit localStorage überschreiben
Sie können jede Ihrer Erweiterungseinstellungen zu Testzwecken außer Kraft setzen. Öffnen Sie Ihre Browser-Entwicklerkonsole über eine HubSpot-Registerkarte, bearbeiten Sie die folgenden Einstellungen und führen Sie den Befehl aus:
Falschen Code melden
Kopieren
KI fragen
const myExtensionSettings = { isReady: true, name: "My app name", url: "My local/qa/prod URL",};localStorage.setItem("LocalSettings:Calling:CallingExtensions", JSON.stringify(myExtensionSettings));
Nachdem Sie Ihre App-Einstellungen mithilfe des Endpunkts der Calling-Einstellungen festgelegt haben, verwenden Sie den PATCH-Endpunkt, um isReady in „true“ zu ändern.
Falschen Code melden
Kopieren
KI fragen
# Example payload to add the call widget app settingscurl --request PATCH \ --url 'https://api.hubapi.com/crm/v3/extensions/calling/APP_ID/settings?hapikey=DEVELOPER_ACCOUNT_API_KEY' \ --header 'accept: application/json' \ --header 'content-type: application/json' \ --data '{"isReady":true}'
Ihre Anruf-App im HubSpot Marketplace veröffentlichen
Sobald Ihre App eingerichtet ist, können Benutzer sie über die Installations-URL der App in ihrem Account installieren. Wenn Sie sie öffentlich auflisten möchten, damit andere HubSpot-Benutzer in der Lage sind, sie zu finden, können Sie sie auch auf dem HubSpot App-Marketplace anbieten. Dies ist nicht notwendig, wenn die App nur für den internen Gebrauch bestimmt ist.
Das extensions-Objekt stellt die folgenden Event-Handler bereit, die Sie aufrufen können, um Nachrichten an HubSpot zu senden oder ein anderes zugeordnetes Verhalten anzugeben. Siehe folgende Beispiele.
Der Wählkontext wird ggf. für die Erstellung von Tickets und/oder Interaktionen verwendet. Das Objekt enthält alle Eigenschaften der onDialNumber-Payload. Diese Eigenschaft trägt zur Gewährleistung der Datenkonsistenz bei, indem der vollständige Wählkontext zwischen HubSpot und Ihrer Drittanbieter-App zurückgegeben wird.
Sendet eine Nachricht, um HubSpot zu informieren, dass der Anruf beendet ist.
Falschen Code melden
Kopieren
KI fragen
// After receiving the call ended event, the user can navigate away, can close the call widget.extensions.callEnded({ externalCallId: string, engagementId: number, callEndStatus: EndStatus,});
Sendet eine Nachricht, um HubSpot zu informieren, dass der Anruf abgeschlossen ist. Für Interaktionseigenschaften ist HubSpot zuständig, d h., sie müssen nicht mehr manuell erstellt oder aktualisiert werden (siehe Hervorhebung).
Die hideWidget-Eigenschaft wird ignoriert, wenn sich der Benutzer in einer Aufgabenwarteschlange mit dem Aufgabentyp Call befindet.
Falschen Code melden
Kopieren
KI fragen
// After receiving the call completed event, HubSpot will// 1) insert the engagement into the timeline// 2) set the default associations on the engagement// 3) closes the widget unless `hideWidget` is set to false.// 4) update the engagement with any engagement propertiesconst data = { engagementId: number, hideWidget: boolean, engagementProperties: { [key: string]: string }, externalCallId: string,}extensions.callCompleted(data);
Eigenschaft
Typ
Beschreibung
engagementId
Zahl
Eine von HubSpot erstellte Interaktion-ID
hideWidget
Boolescher Wert
Gibt an, ob das Widget ausgeblendet werden soll, wenn der Anruf beendet wird. Optionaler Parameter. Die Standardeinstellung ist true.
Sendet eine Nachricht, um HubSpot zu informieren, dass in der Anruf-App ein Fehler aufgetreten ist.
Falschen Code melden
Kopieren
KI fragen
// After receiving the sendError event, HubSpot will display an alert popup to the user with the error message provided.const data = { message: string,};extensions.sendError(data);
Eigenschaft
Typ
Beschreibung
message
Zeichenfolge
Fehlermeldung, die im Warnungs-Pop-up angezeigt wird.
Sendet eine Nachricht, um HubSpot darüber zu informieren, dass die Größe der Anruf-App geändert werden muss.
Falschen Code melden
Kopieren
KI fragen
// After receiving the resizeWidget event, HubSpot will use the provided height and width to resize the call widget.const data = { height: number, width: number,};extensions.resizeWidget(data);
Das extensions-Objekt stellt die folgenden Event-Handler bereit, die Sie aufrufen können, um Nachrichten in HubSpot zu empfangen oder um ein anderes zugeordnetes Verhalten anzugeben. Siehe folgende Beispiele.
Nachricht, die angibt, dass HubSpot bereit ist, Nachrichten zu empfangen.
Falschen Code melden
Kopieren
KI fragen
// Example snippet for handling onReady eventonReady() { extensions.initialized(payload);}
Eigenschaft
Typ
Beschreibung
engagementId
Zahl
Eine von HubSpot erstellte Interaktion-ID
iframeLocation
Aufzählung
widget: Das Drag-&-Drop-Widget wird auf Eintrag-Seiten angezeigt, wenn die Calling-App Inbound-Calling nicht unterstützt. remote: Rahmen in der Navigationsleiste erscheint, wenn die Calling-App Inbound-Calling unterstützt. window: iframe im Calling-Fenster wird angezeigt, wenn die Calling-App Inbound-Calling unterstützt.
Dieses Event wird ausgelöst, wenn ein Benutzer in HubSpot einen ausgehenden Anruf auslöst. Das onDialNumber-Event stellt eine Payload bereit, die alle relevanten Felder enthält, die dem Anruf zugeordnet sind. Diese Felder sind in der folgenden Tabelle aufgeführt:
Die Telefonnummer der Person, die der HubSpot-Benutzer angerufen hat
ownerId
Zeichenfolge oder Nummer
Die ID des angemeldeten Benutzers (in HubSpot)
subjectId
Zahl
Die ID des Betreffs
objectId
Zahl
Objekttyp der Telefonnummer
objectType
Zeichenfolge
Der Objekttyp, der der gewählten Telefonnummer zugeordnet ist (z. B. die Telefonnummer des Kontakts oder Unternehmens); Die möglichen Werte hier sind "CONTACT" oder "COMPANY".
portalId
Zahl
Die ID des HubSpot-Portals
countryCode
Zeichenfolge
Die Landesvorwahl der Telefonnummer
calleeInfo
Array
Informationen über den Angerufenen; Diese sollten Folgendes enthalten:
calleeID: number
calleeObjectTypeId: string
startTimestamp
Zahl
Zeitstempel des Beginns des Anrufs
toPhoneNumberSrc
Zeichenfolge
Der Name der Telefonnummern’ -Eigenschaf in HubSpot. Bei der Eigenschaft kann es sich um einen Standardwert für eine Eigenschaft oder eine benutzerdefinierte Eigenschaft handeln. Ein Kontakt kann beispielsweise über drei Kontakttelefonnummern verfügen, von denen eine mit Büro, eine mit Privat und die andere mit Mobil gekennzeichnet ist.
Wann sollte eine Interaktion erstellt und wann aktualisiert werden?
Ein Benutzer kann einen Anruf innerhalb der HubSpot-Benutzeroberfläche und außerhalb der HubSpot-Benutzeroberfläche initiieren (z. B. Mobile-App, weitergeleitete Nummer usw.). Wenn ein Anruf von der HubSpot-Benutzeroberfläche aus initiiert wird, erstellt HubSpot eine Anrufinteraktion und sendet die Interaktion an die Anruf-App. Sobald der Anruf beendet ist, kann die Anruf-App diese Interaktion mit zusätzlichen Anrufdetails aktualisieren. Wenn ein Anruf außerhalb der HubSpot-Benutzeroberfläche initiiert wird, sollte die App die Anrufinteraktion erstellen.
Welche Bereiche sind als Teil der Integration erforderlich?
Kontakte-hinzufügen- und Chronik-Bereiche sind erforderlich. Diese Bereiche stellen sicher, dass Ihre Anwendung Zugriff auf Kontakte hat und Anrufinteraktionen im CRM erstellen und aktualisieren kann.
Kann diese Funktionalität zu einer bereits bestehenden Anwendung im Marketplace hinzugefügt werden oder muss ich eine neue App erstellen?
Wenn Sie bereits über eine bestehende App verfügen, die den Anwendungsfall „Anrufe“ bedient, können Sie diese Funktion direkt zu Ihrer bestehenden App hinzufügen. Alle Kunden, die Ihre App bereits installiert haben, erhalten Zugriff auf diese neue Funktion, ohne die App erneut installieren zu müssen.
Kann ich meine vorhandene Softphone-Anwendung in das SDK integrieren?
Ja, die Integration Ihrer vorhandenen Softphone-Anwendung sollte sehr einfach sein. Befolgen Sie einfach die Schritte in der obigen Dokumentation, um Ihre Anwendung einsatzbereit zu machen.
Können Benutzer mehrere Integrationen gleichzeitig verwenden?
Ja, Benutzer können mehrere Anrufintegrationen von Drittanbietern gleichzeitig verwenden. Sie können mit dem Provider-Switcher, der nach dem Klicken auf die Anruftaste angezeigt wird, nahtlos zwischen den Anbietern wechseln.
Wenn ein Benutzer meine App bereits installiert hat, wird die Integration automatisch angezeigt?
Ja, wenn ein Benutzer Ihre App bereits installiert hat und Sie dieselbe App mit den Calling-Erweiterungen aktualisieren, wird die Integration automatisch angezeigt. Derzeit gibt es keine Möglichkeit für den Entwickler, die Anruf-App nur für eine Teilmenge von Kunden zu aktivieren.
Kann jeder Benutzer eine App installieren oder deinstallieren?
Nein, nur Benutzer mit den erforderlichen Berechtigungen können eine App installieren und deinstallieren. Erfahren Sie mehr darüber, wie Sie die Berechtigungen eines Benutzers überprüfen.
Kann ich einen Anruf von einem benutzerdefinierten Objekt aus tätigen?
Ja, Anrufintegrationen können Anrufe von benutzerdefinierten Objekten aus tätigen, solange sie nur das SDK zum Erstellen des Anrufs verwenden. Bei jeder Integration muss überprüft werden, ob sie nur das Anruf-SDK zum Erstellen von Anrufen und zum Benachrichtigen von HubSpot im outgoingCall-Event verwenden.Stellen Sie zunächst sicher, dass die Integration das Anruf-SDK verwendet, um Interaktionen im outgoingCall-Event zu erstellen:
Falschen Code melden
Kopieren
KI fragen
outgoingCall({ createEngagement: true });
Wenn createEngagement true ist, erfahren Sie hier, wie Sie Ihre App-Informationen aktualisieren.Hier ist das Beispiel für das gesamte outgoingCall-Event:
Falschen Code melden
Kopieren
KI fragen
const callInfo = { phoneNumber: string, // optional unless call is initiated by the widget createEngagement: true // whether HubSpot should create an engagement for this call callStartTime: number // optional unless call is initiated by the widget};extensions.outgoingCall(callInfo);