Business Central und Twilio: Lassen Sie uns die Botschaft verbreiten!

Die meisten meiner Leser sind mit „as a Service“-Akronymen wie IaaS, PaaS, SaaS vertraut, und die Azure-Plattform von Microsoft unterstützt jedes dieser Konzepte. Nachfolgend einige Beispiele:

Ich wurde kürzlich in das Konzept von CPaaS eingeführt – Kommunikationsplattform als Service und seine vielfältigen Anwendungen in der modernen Welt.

Microsoft Azure verfügt über eine eigene Implementierung von CPaaS über Azure Communication Services. Weitere Informationen finden Sie auf der Microsoft Learn-Plattform.

In diesem Blogbeitrag möchte ich meine Erfahrungen mit einem Twilio-Produkt teilen.

Das Unternehmen konzentriert sich auf den Aufbau von Plattformen für Kommunikationskanäle und Anwendungen:

Ihre SMS- und WhatsApp-Messaging-Plattform erregte meine Aufmerksamkeit.

Dies ist die Übung, die ich durchgearbeitet habe: Ein Verkaufsauftrag in Business Central wird gebucht. Dies löst eine POST-Anforderung an eine Azure-Funktion aus, die wiederum die Messaging-API von Twilio nutzt, um WhatsApp-Nachrichten über die Twilio-Plattform zu senden.

Business Central – Azure Function POST-Anfrage

Abonnieren Sie in Business Central ein Ereignis während der Buchung eines Verkaufsauftrags. Die SMS/WhatsApp könnte auch zu verschiedenen Zeitpunkten während des Lebenszyklus des Dokuments gesendet werden.

codeunit 50100 "Sales Mgt.SVIR"
{
    [EventSubscriber(ObjectType::Codeunit, Codeunit::"Sales-Post", 'OnAfterFinalizePostingOnBeforeCommit', '', false, false)]
    local procedure CallTwilioAzureFunc(var EverythingInvoiced: Boolean; WhseReceive: Boolean; WhseShip: Boolean;
            CommitIsSuppressed: Boolean;
            PreviewMode: Boolean;
            var GenJnlPostLine: Codeunit "Gen. Jnl.-Post Line";
            var ReturnReceiptHeader: Record "Return Receipt Header";
            var SalesCrMemoHeader: Record "Sales Cr.Memo Header";
            var SalesHeader: Record "Sales Header";
            var SalesInvoiceHeader: Record "Sales Invoice Header";
            var SalesShipmentHeader: Record "Sales Shipment Header")
    var
        _cust: Record Customer;
        _phone: Text;
        _message: Text;
        _jsonBody: Text;
        _httpContent: HttpContent;
        _httpResponse: HttpResponseMessage;
        _httpHeader: HttpHeaders;
        _httpClient: HttpClient;
        _url: Label 'https://twillioengine.azurewebsites.net/api/TwilioFunc?code=6iN3A3VgOeFD9EOm9MKaI37seFBctvwuw_Ge7rCaY4XbAzFuLvI2oA==';
    begin
        if PreviewMode then
            exit;
        if SalesHeader.IsTemporary then 
            exit;
        if _cust.Get(SalesHeader."Sell-to Customer No.") then begin
            if _cust."Phone No."  '' then begin
                // build json for POST request with customer cell phone number and the message to send
                _phone := '1' + _cust."Phone No.";
                _message := SalesHeader."No." + ' was just processed.';
                _jsonBody := ' {"PhoneTo":"' + _phone + '","message":"' + _message + '"}';

                // build POST http request
                _httpContent.WriteFrom(_jsonBody);
                _httpContent.GetHeaders(_httpHeader);
                _httpHeader.Remove('Content-Type');
                _httpHeader.Add('Content-Type', 'application/json');
                _httpClient.Post(_url, _httpContent, _httpResponse);
                if not _httpResponse.IsSuccessStatusCode then begin
                    Error(StrSubstNo('Error - Received %1', Format(_httpResponse.HttpStatusCode)));
                end;
            end;
        end;
    end;
}

Richten Sie die Twilio-Sandbox ein

Bevor Sie die Azure-Funktion erstellen, richten Sie Ihr kostenloses Twilio-Testkonto ein.

Es gibt einen Link auf der Website des Unternehmens, um sich für eine kostenlose Testversion anzumelden.

Wenn Sie sich entscheiden, das Projekt in die Produktion zu bringen, können Sie ein Upgrade durchführen, und die monatliche Rechnung besteht aus Gebühren für:

  • Anzahl der von Twilio gemieteten Telefonnummern und
  • Anzahl gesendeter und empfangener Nachrichten.

Nach der Testversion gibt es 1 $ pro Monat pro Telefonnummer und 0,007 $ pro Nachricht.

Sie müssten Folgendes einrichten:

  • Nachrichtendienst für SMS
  • eine Twilio-Telefonnummer für WhatsApp-Nachrichten

So sieht die Twilio-Benutzeroberfläche zum Einstellen des App-Messaging-Dienstes aus:

Und dies ist der Bildschirm, auf dem Sie eine Twilio-Nummer für WhatsApp-Nachrichten zugewiesen bekommen:

Versuchen wir von der Twilio-Plattform aus, eine SMS zu senden:

Sie müssen wählen:

  • das Ziel für Ihre Test-SMS
  • Twilio-Nachrichtendienst
  • Und die Test-SMS

Auf der rechten Seite zeigt die Twilio-Plattform Beispielquellcode in mehreren Programmiersprachen an.

Nachfolgend finden Sie den C#-Quellcode zum Senden einer SMS über die Twilio-Plattform.

Dieser Beispielcode kann in eine Azure-Funktion eingefügt werden:

using System; 
using System.Collections.Generic; 
using Twilio; 
using Twilio.Rest.Api.V2010.Account; 
using Twilio.Types; 
 
class Example 
{ 
    static void Main(string[] args) 
    { 
        var accountSid = "ACe00a276056a4a696ff14691a3bb40f3b"; 
        var authToken = "[AuthToken]"; 
        TwilioClient.Init(accountSid, authToken); 
 
        var messageOptions = new CreateMessageOptions( 
            new PhoneNumber("+16199307581"));   
        messageOptions.MessagingServiceSid = "MGb06079125586edf64f3c13f51843d07e";  
        messageOptions.Body = "Testing for blog";   
 
        var message = MessageResource.Create(messageOptions); 
        Console.WriteLine(message.Body); 
    } 
}

Um den Quellcode zum Senden einer WhatsApp-Nachricht zu erhalten, gehen Sie auf ähnliche Weise zum Blatt „Eine WhasApp-Nachricht senden“.

Und nachdem Sie sich mit der von Twilio zugewiesenen Sandbox verbunden haben, erhalten Sie Folgendes auf Ihrem Telefon:

Klicken Sie auf die Nachricht „Einweg senden“:

Es gibt 3 unterstützte Anwendungsfälle: Terminerinnerungen, Bestellbenachrichtigung, Bestätigungscodes. Für mein Beispiel wähle ich Bestellbenachrichtigung:

Und unten ist der C#-Beispielcode zum Senden der WhatsApp-Nachricht:

using System; 
using System.Collections.Generic; 
using Twilio; 
using Twilio.Rest.Api.V2010.Account; 
using Twilio.Types; 
 
class Example 
{ 
    static void Main(string[] args) 
    { 
        var accountSid = "ACe00a276056a4a696ff14691a3bb40f3b"; 
        var authToken = "[AuthToken]"; 
        TwilioClient.Init(accountSid, authToken); 
 
        var messageOptions = new CreateMessageOptions( 
            new PhoneNumber("whatsapp:+16199307581")); 
        messageOptions.From = new PhoneNumber("whatsapp:+14155238886");    
        messageOptions.Body = "Your Yummy Cupcakes Company order of 1 dozen frosted cupcakes has shipped and should be delivered on July 10, 2019. Details: http://www.yummycupcakes.com/";   
 
        var message = MessageResource.Create(messageOptions); 
        Console.WriteLine(message.Body); 
    } 
}

Zwischen einer Zieltelefonnummer und der Twilio-Sandbox muss ein Handshake stattfinden.

Damit das empfangende Telefon der Twilio-Sandbox beitreten kann, senden Sie vom Empfänger eine Nachricht „Join fall-wood“ an die Twilio-Sandbox.

Dies könnte auch mit einer POST-Anforderung der Azure-Funktion von Business Central ausgelöst werden, die die WhatsApp-Nachricht an die Twilio-Nummer sendet.

Schreiben der Azure-Funktion

Wenn es darum geht, die Azure-Funktion zu erstellen, könnte man:

  • innerhalb der Azure-Plattform entwickeln:
    • Melden Sie sich bei der Azure-Plattform an
    • Erstellen Sie eine neue Funktions-App und eine neue Trigger-Funktion
    • Es gibt eine Test/Debug-Funktion sowie einen Monitor
  • Entwickeln Sie in VS Code
  • Meine Wahl für die Entwicklungsumgebung war Visual Studio:
    • Erstellen Sie ein neues Azure-Funktionsprojekt
    • Erstellen Sie eine neue Triggerfunktion

Der letzte Schritt besteht darin, die Funktion in Azure zu veröffentlichen:

Klicken Sie nach der Bereitstellung auf „Funktions-URL abrufen“ und fügen Sie sie in Ihren AL-Code ein:

Veröffentlichungserweiterung:

Testszenario

Testen Sie es, indem Sie einen Verkaufsauftrag aufgeben, dessen Kunde eine Telefonnummer hat, die der Twilio-Sandbox beigetreten ist. Die Nachricht erscheint in WhatsApp:

Mit dem Übergang zur Cloud kann Business Central jetzt in neue und aufkommende Kommunikationsplattformen wie Twilio integriert werden.

Frohe Entwicklung!

.

Author: admin

Leave a Reply

Your email address will not be published. Required fields are marked *