Slack-Integration: über verpasste Anrufe mit sipgate.io Node.js-Library benachrichtigen

Julia
07.07.2022 0 6:02 min

Was ist sipgate.io?

SMS oder Faxe senden und empfangen, den Anrufverlauf abrufen,  Anrufe initiieren und manipulieren – das alles kann sipgate.io! Mit unseren APIs können Sie unsere Telekommunikationsfunktionen flexibel in Ihren Projekten integrieren. Unsere Library und Tutorials unterstützen Sie dabei, Ihre Telefonie möglichst bequem zu gestalten. 

In diesem Tutorial

Erfahren Sie in dieser Schritt-für-Schritt-Anleitung, wie Sie eine Slack-Nachricht einrichten können, um eine Person oder einen Kanal über verpasste Anrufe zu informieren. Die Slack-Nachricht wird die Telefonnummern des Anrufers und des Angerufenen enthalten.

Den vollständigen Code für dieses Tutorial finden Sie in unserem Github.

Voraussetzungen

Bevor wir uns mit dem Code auseinandersetzten, richten Sie sich ein sipgate-Konto für sipgate.io ein. Wie das geht, erfahren Sie unter www.sipgate.io/get-started.

Um Webhooks für eingehende und ausgehende Anrufe zu aktivieren, gehen Sie auf console.sipgate.com und wählen Sie in der linken Seitenleiste „Webhooks“. Auf der Registerkarte „URLs“ können Sie die Ziel-URLs für diese Webhooks konfigurieren. Dabei unterscheiden wir zwischen den eingehenden und ausgehenden Anrufen. 

Für diese Applikation werden wir nur die URL „Incoming“ verwenden, da wir keine Statistiken über ausgehende Anrufe sammeln wollen. Dafür können Sie jede öffentlich zugängliche URL im Web verwenden. Lokale Adressen wie localhost oder 127.0.0.1 und jede andere lokale Netzwerkadresse können in diesem Projekt nicht eingesetzt werden.

Wenn Sie Webhooks in Ihrer Live-Umgebung verwenden, sollten Sie Ihren Code auf einem geeigneten Webserver mit einer validen Adresse ausführen. Für Entwicklungszwecke empfehlen wir jedoch die Nutzung eines Dienstes, der Ihre lokale Umgebung über das Internet zugänglich macht. Dies erleichtert erheblich das Testen Ihres geschriebenen Codes. Es gibt verschiedene kostenlose Dienste, die dafür genutzt werden können. Einige Beispiele sind localhost.run oder ngrok . Beide stellen Ihnen eine öffentliche URL zur Verfügung, mit der Sie Webhooks von sipgate.io empfangen können. Achten Sie darauf, dass Sie den richtigen Port weiterleiten (in diesem Tutorial Port 8080) und dass der von Ihnen gewählte Anbieter sichere Verbindungen über HTTPS bietet.

Aufsetzen des Projekts

Jetzt, wo Sie Ihr sipgate-Konto eingerichtet haben, können wir mit Coden loslegen.

  • Für dieses Projekt werden wir die sipgate.io Node.js-Library verwenden. Die Library macht die Arbeit mit den sipgate-APIs viel einfacher und bietet außerdem eine bequeme Gelegenheit, einen Webhook-Server einzurichten.
  • Erstellen Sie ein neues Node-Projekt, indem Sie ein neues Verzeichnis mit unserem Projekt anlegen. Führen Sie danach den Befehl npm init -y aus. Dadurch wird einepackage.json -Datei erstellt, die einige Metadaten für das Projekt enthält. Um das Projekt auszuführen, fügen Sie folgenden Befehl in die package.json-Datei ein.
"scripts": {
  "start": "node server.js"
}
  • Um die sipgate.io-Library zu installieren, führen Sie run npm install -s sipgateioaus.

Webhook-Server

Los geht’s mit dem Coding!

  • Erstellen Sie eine neue Datei mit dem Namen server.js . Das folgende Snippet erstellt eine Instanz des Webhook-Moduls von sipgate.io und verwendet dieses, um einen Webhook-Server mit zusätzlichen Optionen zu erstellen. Diese Optionen enthalten den Port und die Serveradresse, um Anrufereignisse wie das hangup-Event zu behandeln. Da diese Adresse variieren kann (vor allem, wenn Sie Ihren lokalen Rechner mit einem SSH-Tunnel wie bei ngrok & Co), ist es eine gute Idee, sie aus einer Umgebungsvariable zu lesen.
const { createWebhookModule } = require("sipgateio");

const serverAddress = process.env.SERVER_ADDRESS;
if (!serverAddress) {
  console.error(
    "Please provide a server address via the environment variable SERVER_ADDRESS"
  );
  return;
}

const webhookServerOptions = {
  port: process.env.SERVER_PORT || 3000,
  serverAddress,
};

createWebhookModule().createServer(webhookServerOptions);
  • Die Funktion createServer gibt ein Promise für einen WebhookServer zurück, der dann verwendet werden kann, um Rückruffunktionen für verschiedene Anrufereignisse zu registrieren:
createWebhookModule()
  .createServer(webhookServerOptions)
  .then((server) => {
    console.log(
      `Server running at ${webhookServerOptions.serverAddress}\n` + "Ready for calls 📞"
    );
    server.onHangUp((hangUpEvent) => {
      console.log(
        `Hung up call from ${hangUpEvent.from} to ${hangUpEvent.to}`
      );
    });
  });
  • Jetzt ist es Zeit für einen Testlauf! Starten Sie den Server mit npm start und warten Sie auf die Meldung, dass der Server läuft.

🗒Anmerkung:  Überprüfen Sie, dass die richtige Serveradresse angezeigt wird. Ist dies nicht der Fall, stellen Sie sicher, dass Sie Ihre Umgebungsvariable richtig definiert haben, zum Beispiel SERVER_ADDRESS=http://your.address.

  • Wenn Sie nun Ihre sipgate-Nummer anrufen und auflegen, sollten Sie das Protokoll des hangup-Events sehen.Wir werden also über jeden aufgelegten Anruf benachrichtigt. Da wir jedoch nur an den Anrufen interessiert sind, die aufgelegt wurden, ohne dass sie beantwortet wurden, werden wir die Anrufe nach calls des HangUpEvents filtern.
createWebhookModule()
  .createServer(webhookServerOptions)
  .then((server) => {
    // ...
    server.onHangUp((hangUpEvent) => {
      if (hangUpEvent.cause === "cancel") {
        console.log(
          `Canceled call from ${hangUpEvent.from} to ${hangUpEvent.to}`
        );
      }
    });
  });

Slack-Webhook

  • Jetzt sind wir bereit, einen Slack-Webhook über einen abgebrochenen Anruf zu senden. Zunächst müssen wir einen neuen Slack-Webhook für einen Kanal oder eine Person konfigurieren, um die Nachricht senden zu können. Weitere Informationen darüber finden Sie in der Slack Dokumentation.
  • Im nächsten Schritt senden Sie eine Post-Anfrage an die von Slack angegebene URL.
  • Wir verwenden in diesem Tutorial axios, um die Anfragen an Slack zu stellen. Führen Sie npm install -s axios aus, um das Paket zu installieren.
  • Importieren Sie den axios-Client und rufen Sie die Slack-Webhook-URL aus der Umgebungsvariable ab. Erweitern Sie dafür die Datei server.js wie folgt:
const axios = require("axios").default;

const slackWebhookUrl = process.env.SLACK_WEBHOOK_URL;
if (!slackWebhookUrl) {
  console.error(
    "Please provide a Slack webhook URL via the environment variable SLACK_WEBHOOK_URL"
  );
  return;
}
  • Dann können wir den Callback des hangup-Events anpassen, um eine Post-Anfrage an Slack zu senden.
createWebhookModule()
  .createServer(webhookServerOptions)
  .then((server) => {
    // ...
    server.onHangUp((hangUpEvent) => {
      if (hangUpEvent.cause === "cancel") {
        axios.post(slackWebhookUrl, {
          text: `Canceled call from ${hangUpEvent.from} to ${hangUpEvent.to}`,
        })
        .catch(console.error);
      }
    });
  });
  • Jetzt sind wir bereit, unsere Implementierung zu testen. Bevor Sie den Server starten, stellen Sie sicher, dass die erforderlichen Umgebungsvariablen korrekt definiert wurden. Den Server können Sie mit dem Befehl npm startstarten.

Rufen Sie Ihre sipgate-Nummer an, brechen Sie den Anruf ab. Nach diesem Vorgang sollten Sie eine Slack-Nachricht über einen verpassten Anruf bekommen.

Fazit

In diesem Tutorial haben Sie gelernt, wie Sie für verpasste Anrufe eine Nachricht in einen Slack-Kanal pushen können.

Das vollständige Projekt finden Sie in unserem GitHub-Repository.

Wenn Sie mehr über die Möglichkeiten unserer sipgate.io-Library erfahren möchten, schauen Sie sich gerne die anderen Tutorials in unserem Blog an. 

 

 

 

 

Keine Kommentare


Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.