https://a.storyblok.com/f/270183/1368x665/68e09b1bb3/25aug_dev_blog_golang-rcs.jpg

Senden von RCS-Textnachrichten mit Go und der Vonage Messages API

Zuletzt aktualisiert am August 26, 2025

Lesedauer: 3 Minuten

RCS (Rich Communication Services) bringt SMS mit interaktiven Nachrichten, Bildern, Rich Media, Lesebestätigungen und vielem mehr auf die nächste Stufe. Dieses Tutorial zeigt Ihnen, wie Sie grundlegende RCS-Textnachrichten mit Go und der Vonage Messages API versenden können und legt den Grundstein für erweiterte Funktionen.

>> TL;DR: Finden Sie den kompletten funktionierenden Code auf GitHub.

Obwohl das Vonage Go SDK derzeit archiviert ist, können wir direkte API-Anfragen über net/httpverwenden, wodurch Sie die volle Kontrolle über die Anfrage und die Antwort erhalten.

Voraussetzungen

Vergewissern Sie sich, dass Sie die folgenden Informationen haben:

  • Go 1.18+ installiert

  • Ein Vonage API-Konto

  • Ein registrierter RCS Business Messaging (RBM) Agent

  • Ein Telefon mit aktiviertem RCS zum Testen

  • ngrok (für lokale Webhook-Tests - in diesem Beispiel optional)

Vonage API-Konto

Um dieses Tutorial durchzuführen, benötigen Sie ein Vonage API-Konto. Wenn Sie noch keines haben, können Sie sich noch heute anmelden und mit einem kostenlosen Guthaben beginnen. Sobald Sie ein Konto haben, finden Sie Ihren API-Schlüssel und Ihr API-Geheimnis oben auf dem Vonage-API-Dashboard.

So kontaktieren Sie Ihren Vonage Account Manager

Um RCS-Funktionen in Ihrer Vonage-Anwendung senden und empfangen zu können, benötigen Sie einen registrierten Rich Business Messaging (RBM)-Agenten und ein Telefon mit RCS-Funktionen.

Derzeit ist RCS Messaging über Vonage nur für verwaltete Konten verfügbar. Sie müssen Ihren Kundenbetreuer kontaktieren, um die Aktivierung des Entwicklermodus für Ihren RBM-Agenten zu beantragen. Der Entwicklermodus ermöglicht es Ihnen, RCS Messaging an zugelassene Nummern zu testen, bevor Sie den Prozess der Agentenverifizierung abschließen und in die Produktion einsteigen.

Bitte kontaktieren Sie unser Verkaufsteam wenn Sie noch kein verwaltetes Konto haben.

Wie Sie Ihr Go-Projekt einrichten

Beginnen wir damit, unser Projekt einzurichten.

Initialisieren Sie das Projekt

Erstellen Sie ein neues Verzeichnis und initialisieren Sie ein Go-Modul:

mkdir rcs-text-golang
cd rcs-text-golang
go mod init rcs-text-golang

Projektabhängigkeiten installieren

Installieren Sie die erforderlichen Go-Pakete:

go get github.com/joho/godotenv github.com/golang-jwt/jwt/v4
  • godotenv: Lädt Umgebungsvariablen aus einer .env-Datei

  • golang-jwt: Erzeugt JWT-Token für die API-Authentifizierung

Erstellen Sie Ihre Projektdateien

Erstellen Sie die Hauptanwendungsdatei und die Umgebungskonfigurationsdatei:

touch main.go .env

Konfigurieren von Umgebungsvariablen

Fügen Sie in der .env-Datei Ihre Vonage-Anmeldedaten und -Konfiguration hinzu:

RCS_SENDER_ID=""
TO_NUMBER=""
VONAGE_PRIVATE_KEY_PATH=./private.key
VONAGE_APPLICATION_ID=""

  • RCS_SENDER_ID: Ihre RBM-SenderID (der Name der Marke). Die SenderID erfordert eine besondere Formatierung, z. B. ohne Leerzeichen. Erkundigen Sie sich bei Ihrem Kundenbetreuer, wenn Sie unsicher sind.

  • TO_NUMBER: Die Telefonnummer des Empfängers im internationalen Format ohne das Symbol + (z. B. 447700900000)

  • VONAGE_PRIVATE_KEY_PATH: Pfad zu Ihrer privaten Schlüsseldatei

  • VONAGE_APPLICATION_ID: Ihre Vonage-Anwendungs-ID

Ihre Vonage Anwendungs-ID und private.key-Datei erhalten Sie im Abschnitt "Erstellen und Konfigurieren Ihrer Vonage Anwendung" weiter unten.

Wie man RCS-Textnachrichten sendet

In main.goimplementieren wir die Funktionalität zum Senden von RCS-Textnachrichten mit der Vonage Messages API.

Definieren Sie die RCS-Nachrichtenstruktur

Lassen Sie uns zunächst die Struktur für unsere RCS-Nachricht definieren:

import (
	"bytes"
	"encoding/json"
	"fmt"
	"net/http"
	"os"
	"time"

	"github.com/golang-jwt/jwt/v4"
	"github.com/joho/godotenv"
)

type RCSMessage struct {
	From        string `json:"from"`
	To          string `json:"to"`
	Channel     string `json:"channel"`
	MessageType string `json:"message_type"`
	Text        string `json:"text"`
}

Diese Struktur verwendet die minimal erforderlichen Felder. Um den vollen Funktionsumfang von RCS-Nachrichten, einschließlich SMS-Failover, zu sehen, können Sie die API-Referenz zum Senden von Nachrichten.

Implementierung der Hauptfunktion

Nun wollen wir die Hauptfunktion zum Senden der RCS-Nachricht implementieren. Die Hauptfunktion kann in drei Hauptteile unterteilt werden:

  • Einrichtung und Konfiguration: Die Funktion lädt Umgebungsvariablen aus der .env-Datei, ruft wichtige Konfigurationsdaten wie Absender-ID und Empfängernummer ab und erstellt eine RCS-Nachrichtenstruktur mit dem Textinhalt.

  • Authentifizierung und Anfragevorbereitung: Es generiert ein JWT-Token unter Verwendung der Anwendungs-ID und des privaten Schlüssels und erstellt dann eine HTTP-Anfrage mit der Nutzlast der Nachricht und den richtigen Autorisierungs-Headern.

  • Ausführung von Anfragen und Bearbeitung von Antworten: Die Funktion sendet die HTTP-Anfrage an die Vonage Messages API, verarbeitet die Antwort und zeigt sowohl den Statuscode als auch den Antwortkörper an, um die erfolgreiche Zustellung der Nachricht zu bestätigen.

func main() {
	err := godotenv.Load()
	if err != nil {
		fmt.Println("Error loading .env file")
		os.Exit(1)
	}
	
	fromID := os.Getenv("RCS_SENDER_ID")
	toNumber := os.Getenv("TO_NUMBER")
	applicationID := os.Getenv("VONAGE_APPLICATION_ID")
	privateKeyPath := os.Getenv("VONAGE_PRIVATE_KEY_PATH")

	if applicationID == "" || privateKeyPath == "" || fromID == "" || toNumber == "" {
		fmt.Println("Error: Required environment variables are missing.")
		os.Exit(1)
	}

	message := RCSMessage{
		From:        fromID,
		To:          toNumber,
		Channel:     "rcs",
		MessageType: "text",
		Text:        "Hello from Go and Vonage!",
	}

	payload, err := json.Marshal(message)
	if err != nil {
		fmt.Println("Error encoding JSON:", err)
		return
	}

	req, err := http.NewRequest("POST", "https://api.nexmo.com/v1/messages", bytes.NewBuffer(payload))
	if err != nil {
		fmt.Println("Error creating request:", err)
		return
	}

	token, err := generateJWT(applicationID, privateKeyPath)
	if err != nil {
		fmt.Println("Error generating JWT:", err)
		return
	}
	
	req.Header.Add("Authorization", "Bearer "+token)
	req.Header.Add("Content-Type", "application/json")
	req.Header.Add("Accept", "application/json")

	client := &http.Client{}
	resp, err := client.Do(req)
	if err != nil {
		fmt.Println("Error sending request:", err)
		return
	}
	defer resp.Body.Close()

	fmt.Printf("Response status: %s\n", resp.Status)
	
	var respBody bytes.Buffer
	_, err = respBody.ReadFrom(resp.Body)
	if err != nil {
		fmt.Println("Error reading response body:", err)
		return
	}
	
	fmt.Println("Response body:", respBody.String())
}

JWT-Authentifizierung implementieren

Die Hauptfunktion stützt sich auf eine generateJWT Funktion, um die JWT-Authentifizierung für die Nachrichten-API zu übergeben. Implementieren wir die Funktion zur Erzeugung eines JWT-Tokens:

func generateJWT(applicationID, privateKeyPath string) (string, error) {
	privateKeyBytes, err := os.ReadFile(privateKeyPath)
	if err != nil {
		return "", fmt.Errorf("error reading private key: %w", err)
	}
	
	privateKey, err := jwt.ParseRSAPrivateKeyFromPEM(privateKeyBytes)
	if err != nil {
		return "", fmt.Errorf("error parsing private key: %w", err)
	}
	
	claims := jwt.MapClaims{
		"application_id": applicationID,
		"iat":           time.Now().Unix(),
		"exp":           time.Now().Add(time.Hour).Unix(),
		"jti":           time.Now().UnixNano(),
	}
	
	token := jwt.NewWithClaims(jwt.SigningMethodRS256, claims)
	
	tokenString, err := token.SignedString(privateKey)
	if err != nil {
		return "", fmt.Errorf("error signing token: %w", err)
	}
	

>> Siehe die vollständige main.go Datei.

So erstellen und konfigurieren Sie Ihre Vonage-Anwendung

Jetzt, wo Ihre Go-App fertig ist, müssen Sie auch Ihre Vonage-Anwendung erstellen und einrichten:

Erstellen Sie Ihre App im Vonage Dashboard. Geben Sie der App einen Namen und aktivieren Sie die Nachrichtenfunktion.

  • Um eine Anwendung zu erstellen, gehen Sie auf die Seite Erstellen einer Anwendung auf dem Vonage Dashboard und legen Sie einen Namen für Ihre Anwendung fest.

  • Klicken Sie bei Bedarf auf "öffentlichen und privaten Schlüssel erzeugen". Es wird ein privater Schlüssel (.key-Datei) erzeugt. Laden Sie ihn herunter und bewahren Sie ihn sicher auf. Dieser Schlüssel wird für die Authentifizierung bei API-Anfragen benötigt. Hinweis: Private Schlüssel funktionieren nur, wenn die Anwendung gespeichert wird.

  • Wählen Sie die von Ihnen benötigten Funktionen (z. B. Sprache, Nachrichten, RTC usw.) und stellen Sie die erforderlichen Webhooks bereit (z. B. Ereignis-URLs, Antwort-URLs oder URLs für eingehende Nachrichten). Diese werden im Lernprogramm beschrieben.

  • Zum Speichern und Bereitstellen klicken Sie auf "Neue Anwendung generieren", um die Einrichtung abzuschließen. Ihre Anwendung ist nun bereit für die Verwendung mit Vonage-APIs.

In den Einstellungen Ihrer Vonage-Anwendung:

  • Setzen Sie die Eingangs-URL auf einen Webhook-Endpunkt (Sie können ngrok zum Testen verwenden)

  • Legen Sie die Status-URL fest, um Aktualisierungen des Nachrichtenstatus zu erhalten.

  • Erzeugen Sie einen öffentlichen und einen privaten Schlüssel, indem Sie auf die Schaltfläche

    • Stellen Sie sicher, dass Sie die Datei private.key in das Stammverzeichnis des Projekts ( rcs-text-golang)

  • Speichern Sie die Änderungen

Verknüpfen Sie dann Ihren RCS-Agenten, indem Sie auf die Registerkarte "Externe Konten verknüpfen" klicken:

Screenshot of the Vonage application settings page labeled 'Vonage-GoLang-RCS', showing linked external account 'Vonage RCS' and options for voice and messages capabilities.Vonage application dashboard showing successful linking of an RCS external account to a Go-based application.

So testen Sie Ihre Go RCS-Anwendung

Führen Sie Ihre Go-Anwendung aus:

go run main.go

Wenn alles korrekt eingerichtet ist, sollten Sie eine erfolgreiche Antwort erhalten:

Response status: 202 Accepted
Response body: {"message_uuid":"83e829db-8784-40a1-bfd6-26399046d4d2"}

Auf dem RCS-fähigen Gerät des Empfängers sollte die Nachricht in dessen nativer Messaging-App mit Ihrem Markennamen und Ihrer Nachricht erscheinen.

Mobile phone screenshot showing an RCS message from Vonage reading 'Hello from Go and Vonage!' in the default Android messaging interface.RCS message received from a Vonage agent using Go and the Messages API.

Abschließende Überlegungen

Gute Arbeit! Sie haben den Versand von RCS-Textnachrichten mit Go und der Vonage Messages API erfolgreich implementiert. Aber RCS bietet so viel mehr! Sie können versuchen, vorgeschlagene Antworten, hochauflösende Bilder und Videos oder RCS-spezifische Rich Cards zu versenden.

Die Nachrichten-API bietet auch Nachrichtenstatus, die uns helfen zu verstehen, was mit unseren RCS-Nachrichten passiert. In einem zukünftigen Blogbeitrag werde ich zeigen, wie man den Nachrichtenstatus mit Webhooks verfolgen kann.

Wenn Sie Fragen oder Vorschläge für weitere Go- oder RCS-Inhalte haben, beteiligen Sie sich an der Diskussion mit uns auf der Vonage Community Slack oder kontaktieren Sie uns auf X, früher bekannt als Twitter. Wir würden gerne hören, was Sie als nächstes bauen!

Share:

https://a.storyblok.com/f/270183/384x384/e4e7d1452e/benjamin-aronov.png
Benjamin AronovAdvokat für Entwickler

Benjamin Aronov ist ein Entwickler-Befürworter bei Vonage. Er ist ein bewährter Community Builder mit einem Hintergrund in Ruby on Rails. Benjamin genießt die Strände von Tel Aviv, das er sein Zuhause nennt. Von Tel Aviv aus kann er einige der besten Startup-Gründer der Welt treffen und von ihnen lernen. Außerhalb der Tech-Branche reist Benjamin gerne um die Welt auf der Suche nach dem perfekten Pain au Chocolat.