A purple robot reading a story time book, with a bubble next to it that writes Gemini inside.

Erstellen Sie einen Storytelling-Dienst mit RCS Rich Cards und Gemini

Zuletzt aktualisiert am July 30, 2025

Lesedauer: 6 Minuten

Einführung

Dieses Tutorial zeigt Ihnen, wie Sie einen generativen KI-Storytelling-Dienst mit der Vonage Messages API für RCS und Googles Gemini KI. Sie erfahren, was RCS ist, wie Sie RCS-Rich-Card-Nachrichten senden und empfangen und wie Sie Gemini integrieren, um kurze Gute-Nacht-Geschichten zu generieren.

Inspiriert von der Schlafenszeit meines Kleinkindes wollte ich etwas Nützliches schaffen. Also habe ich RCS Messaging mit Gemini AI kombiniert, um einen einfachen Storytelling-Dienst zu entwickeln.

An android phone view showcasing an image that that shows Gemini and tell me a story with a generate story buttonRCS Story Demonstration

Den kompletten Quellcode finden Sie auf dem Vonage Community GitHub Repository.

Voraussetzungen

Wie Sie RCS auf Ihrem Telefon zum Laufen bringen

Um RCS-Nachrichten in Ihrer Vonage-Anwendung zu senden und zu empfangen, benötigen Sie einen registrierten RBM-Agenten und ein Telefon mit RCS-Funktionen.

RCS über Vonage ist derzeit nur für verwaltete Accounts verfügbar. Sie müssen sich Ihren Account Manager kontaktieren kontaktieren, um den Entwicklermodus zu aktivieren, der Tests mit zugelassenen Nummern ermöglicht.

Wenn Sie keinen verwalteten Account haben, wenden Sie sich an das Vonage Vertriebsteam für Unterstützung.

Terminologie

RCS (Rich Communication Services): Ein Industriestandard, der herkömmliche Nachrichten mit Rich Media, Markeninhalten und Lesebestätigungen erweitert. Wenn das Gerät oder Netzwerk des Empfängers RCS nicht unterstützt, werden die Nachrichten automatisch per SMS zugestellt, um sicherzustellen, dass sie trotzdem zugestellt werden.

Erfahren Sie mehr in unserer RCS-Dokumentation.

SMS (Short Message Service): Die herkömmliche SMS unterstützt nur reinen Text. RCS ermöglicht Schaltflächen mit Markenzeichen, Bilder und Statusaktualisierungen. Lernen Sie, SMS-Nachrichten mit Node.js zu versenden.

MMS (Multimedia Messaging Service): Im Gegensatz zu MMS, das häufig eine geringere Medienqualität und Dateigrößenbeschränkungen aufweist, unterstützt RCS hochwertige Medien und Funktionen wie Tippanzeigen und Aktualisierungen des Zustellungsstatus. Erfahren Sie was Sie mit MMS machen können und wie man MMS sendet mit Node.js.

  • 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.

  • Wenn Sie eine API verwenden möchten, die Webhooks nutzt, benötigen Sie einen privaten Schlüssel. Klicken Sie auf "Generate public and private key", der Download sollte automatisch starten. Bewahren Sie ihn sicher auf; dieser Schlüssel kann bei Verlust nicht erneut heruntergeladen werden. Er folgt der Namenskonvention privat_<Ihre App-ID>.key. Dieser Schlüssel kann nun zur Authentifizierung von API-Aufrufen verwendet werden. Hinweis: Ihr Schlüssel funktioniert erst, wenn Ihre Anwendung gespeichert ist.

  • Wählen Sie die benötigten Funktionen (z. B. Voice, 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.

Messages API-Fähigkeit

Starten einer ngrok-Tunneling-Instanz

Wenn Sie ngrok noch nicht benutzt haben, können Sie hier beginnen. Ich habe die Schritte zur Ausführung einer Instanz unterhalb des Bildes im nächsten Abschnitt hinzugefügt.

Führen Sie den folgenden Befehl aus, um eine ngrok-Tunneling-Instanz zu starten.

ngrok http 3000

In der Ausgabe finden Sie eine URL, die mit https:// beginnt und in .ngrok.app/ endet. Notieren Sie sich diese, da Sie sie im nächsten Schritt für die Konfiguration Ihrer Webhooks benötigen.

Forwarding https://94cd51b63460.ngrok.app/ -> http://localhost:8000          

Webhooks konfigurieren

Zurück im Vonage API Dashboard, unter Ihren Apps, schalten Sie die Option "Messages" unter "capabilities" um und setzen Sie die öffentliche URL Ihres Servers von ngrok als Endpunkt für eingehende Nachrichten und Ereignisse. es sollte wie folgt aussehen https://94cd51b63460.ngrok.app/webhooks/inbound für eingehende Nachrichten und https://94cd51b63460.ngrok.app/webhooks/status für den Status. Wenn Sie mehr über Webhooks erfahren möchten, finden Sie Informationen in unserer Vonage-Dokumentation.

Inbound and Status URL with an ngrok generated url appended by /webhooks/inbound and /webhooks/stats respectively.webhooks

Erste Projekteinrichtung für Vonage Messages API

Klonen Sie das Vonage Community GitHub-Repository für dieses Projekt und npm install die Abhängigkeiten.

npm install express debug @vonage/messages @vonage/server-sdk dotenv

Erstellen Sie die Umgebungsvariablendatei

Erstellen Sie eine .env Datei in Ihrem Projektstamm.

VONAGE_APPLICATION_ID=YOUR_VONAGE_APPLICATION_ID, can be found within the application you’ve created

VONAGE_PRIVATE_KEY=./private.key, is the path to the private.key file that was generated when you created your application

RCS_SENDER_ID=YOUR_RCS_SENDER_ID

PHONE_NUMBER=YOUR_PHONE_NUMBER_E164 that will receive the RCS messages

PORT=3000

VONAGE_API_SIGNATURE_SECRET= is the secret used to sign the request that corresponds to the signature secret associated with the api_key included in the JWT claims. You can identify your signature secret on the Dashboard settings

In Ihrem Projekt finden Sie auch eine vonage.js-Datei die das Dotenv und Vonage Client Setup enthält.

JWT-Verifizierung hinzufügen

Fügen Sie eine JWT-Verifizierungsfunktion hinzu, um zu überprüfen, ob die eingehende Anfrage (z. B. eine Nachricht oder ein Anruf) von Vonage stammt.

Die Variable VONAGE_API_SIGNATURE_SECRET ist das Geheimnis, das zum Signieren der Anfrage verwendet wird und dem Signaturgeheimnis entspricht, das mit dem in den JWT-Ansprüchen enthaltenen API-Schlüssel verbunden ist. Sie können Ihr Signaturgeheimnis in den Dashboard-Einstellungen.

Sie können mehr erfahren über die Überprüfung des Antrags.

const verifyJWT = (req) => {
  // Verify if the incoming request came from Vonage
  const jwtToken = req.headers.authorization.split(" ")[1];
  if(!verifySignature(jwtToken, process.env.VONAGE_API_SIGNATURE_SECRET)) {
    console.error("Signature does not match");
    throw new Error("Not a Vonage API request");
  }

  console.log("JWT verified");
}

Stellen Sie sicher, dass Sie die @vonage/jwt-Abhängigkeit installieren.

npm install @vonage/jwt

Senden einer RCS-Rich-Card-Nachricht

In Ihrer server.js Datei, finden Sie den fertigen Code mit der Gemini-Integration, aber ich wollte Ihnen einen Ausgangspunkt geben, wie man eine Rich Card Message in RCS mit einem fest kodierten Text sendet, damit Sie eine erste Erfahrung damit machen und sehen können, wie es läuft, bevor Sie eine komplexere Einrichtung vornehmen, mit allem, was wir bisher eingerichtet haben.

Fügen Sie zunächst die Importe hinzu und definieren Sie Ihre Variablen.

import Express from "express";

import { RCSCustom, RCSText } from "@vonage/messages";

import { vonage } from "./vonage.js";

import "dotenv/config";

const app = new Express();

const port = process.env.PORT || 3000;

const recipientNumber = process.env.PHONE_NUMBER;

if (!recipientNumber) {

  process.exit(1);

}

if (!process.env.RCS_SENDER_ID) {

  process.exit(1);

}

Wir werden auch einen asynchronen Wrapper für die Fehlerbehandlung in Routen verwenden.

const catchAsync = (fn) => (req, res, next) => {

  fn(req, res, next).catch(next);

};

app.use(Express.json());

app.get(

  "/send-story-request",

  catchAsync(async (req, res) => {

    await sendBedtimeStoryRequest(recipientNumber);

    res.status(200).json({ message: "Bedtime story request sent!" });

  })

);

Erstellen Sie den /webhooks/status Endpunkt.

app.post(

  "/webhooks/status",

  catchAsync(async (req, res) => {

    res.status(200).json({ ok: true });

  })

);

Erstellen Sie den /webhooks/inbound Endpunkt.

app.post(

  "/webhooks/inbound",

  catchAsync(async (req, res) => {

    const { channel, message_type, reply, from } = req.body;

    if (channel === 'rcs' && message_type === 'reply' && reply) {

      const receivedId = reply.id;

      const receivedTitle = reply.title;

      if (receivedId === 'GENERATE_STORY_REQUEST' || receivedTitle === 'Generate Story') {

        const replyToNumber = from;

        const helloWorldMessage = "Hello world!";

        await sendRCSGreeting(replyToNumber, helloWorldMessage);

      } else {

        // Unhandled reply

      }

    } else if (channel === 'rcs' && message_type === 'text') {

      if (req.body.text && req.body.text.toLowerCase() === 'generate story') {

        await sendRCSGreeting(from, "Hello world!");

      } else {

        await sendRCSGreeting(from, "I received your message: " + req.body.text);

      }

    }

    res.status(200).json({ ok: true });

  })

);

Fügen Sie einige Meldungen zur Fehlerbehandlung hinzu, und die Anwendung lauscht auf dem definierten Port (3000).

app.all("*", (req, res) => {

  res.status(404).json({

    status: 404,

    title: "Not Found",

  });

});

app.use((err, req, res, next) => {

  res.status(500).json({

    status: 500,

    title: "Internal Server Error",

    detail: err.message,

  });

});

app.listen(port);

Erstellen Sie die sendBedtimeStoryRequest die eine neue benutzerdefinierte RCS-Nachricht mit der Aufschrift "Bedtime Story Generator" sendet, die eine Schaltfläche zur Erstellung einer neuen Geschichte enthält.

const sendBedtimeStoryRequest = async (number) => {

  const message = new RCSCustom({

    to: number,

    from: process.env.RCS_SENDER_ID,

    custom: {

      contentMessage: {

        richCard: {

          standaloneCard: {

            cardOrientation: "VERTICAL",

            cardContent: {

              title: "Bedtime Story Generator",

              description: 'Tap "Generate Story" for a magical tale!',

              media: {

                height: "MEDIUM",

                contentInfo: {

                  fileUrl:

                    "https://cdn-icons-png.flaticon.com/512/2917/2917637.png",

                },

              },

              suggestions: [

                {

                  reply: {

                    text: "Generate Story",

                    postbackData: "GENERATE_STORY_REQUEST",

                  },

                },

              ],

            },

          },

        },

      },

    },

  });

  try {

    await vonage.messages.send(message);

  } catch (err) {

    if (err.response) {

      err.response.text().catch(() => {});

    }

  }

};

Erstellen Sie die sendRCSGreeting die eine RCS-Nachricht über die Vonage Messages API sendet.

const sendRCSGreeting = async (to, messageText) => {

  const message = new RCSText({

    to: to,

    from: process.env.RCS_SENDER_ID,

    text: messageText,

  });

  try {

    await vonage.messages.send(message);

  } catch (err) {

    if (err.response) {

      err.response.text().catch(() => {});

    }

  }

};

Um die Anwendung auszuführen, starten Sie den Server:

node server.js

Rufen Sie dann die folgende URL in Ihrem Browser auf, wodurch die erste Nachricht an das Telefon des Benutzers ausgelöst wird, in der er aufgefordert wird, eine Geschichte zu erstellen. Die JSON-Bestätigung in Ihrem Browser sowie die empfangene RCS-Nachricht auf Ihrem Telefon sind Zeichen dafür, dass das System funktioniert.

http://localhost:3000/send-story-request

Integrieren Sie Google Gemini

Jetzt, wo RCS-Messaging und Webhook funktionieren, können wir Google Gemini zu unserem Storytelling-Dienst hinzufügen.

Wenn Sie zu AI Studioeinloggst und einen neuen Chat erstellst, kannst du oben rechts '<\>Get Code' sehen und die Programmiersprache deiner Wahl auswählen. Wähle das Modell. Ich habe "Gemini 1.5 Flash Experimental" verwendet, aber Sie können die Sprache wählen, die für Ihr Projekt am sinnvollsten ist.

Um mehr zu erfahren, besuchen Sie die Gemini Entwickler API Dokumentationsseite.

Installieren Sie das Gemini SDK

npm install @google/generative-ai

Fügen Sie Ihren Gemini-API-Schlüssel zu .env.

GEMINI_API_KEY="YOUR_GEMINI_API_KEY"

Zwillinge initialisieren

import { GoogleGenerativeAI } from "@google/generative-ai";

const genAI = new GoogleGenerativeAI(process.env.GEMINI_API_KEY);

const geminiModel = genAI.getGenerativeModel({ model: "gemini-1.5-flash" });

Geschichten generieren mit Gemini

Nachdem Gemini initialisiert wurde, aktualisieren wir unseren /webhooks/inbound Handler. Wenn der Benutzer auf "Generate Story" klickt, rufen wir statt der Antwort "Hello world!" nun geminiModel.generateContent mit einer speziellen Aufforderung für eine Gute-Nacht-Geschichte auf.

Der generierte Text wird dann an den Benutzer zurückgeschickt, indem sendGeneratedStory. Wir haben auch eine Funktion für Benutzer hinzugefügt, die "Story generieren" manuell eingeben könnten.

Die Funktion sendGeneratedStory Funktion nimmt nun den generierten Text und verwendet RCSText, um ihn als reguläre RCS-Textnachricht zurückzusenden.

Testen Sie den Storytelling-Dienst

Um die Anwendung auszuführen, starten Sie den Server (erneut):

node server.js

Rufen Sie dann die folgende URL in Ihrem Browser auf: http://localhost:3000/send-story-request

Auf Ihrem Gerät erhalten Sie eine RCS-Nachricht. Tippen Sie auf "Story generieren", um eine von Gemini erstellte Gute-Nacht-Geschichte zu erhalten.

A message is received on the phone device, the user clicks on the message, they click on the generate story button and then a story message is received.RCS Project

Schlussfolgerung

In diesem Tutorial habe ich Ihnen gezeigt, wie Sie einen Gemini-basierten Storytelling-Dienst mit der RCS-API von Vonage erstellen können. Das letzte Mal, dass ich etwas mit RCS zu tun hatte, war 2020. Ich habe an einem Workshop teilgenommen, bei dem jeder Teilnehmer eine RCS-fähige SIM-Karte erhalten hat. Es war schön, wieder mit RCS zu arbeiten, und ich kann es kaum erwarten, weitere Blogbeiträge darüber zu schreiben.

Haben Sie eine Frage oder möchten Sie etwas mitteilen? Beteiligen Sie sich am Gespräch auf dem Vonage Community Slackund bleiben Sie auf dem Laufenden mit dem Entwickler-Newsletter, folgen Sie uns auf X (früher Twitter), abonnieren Sie unseren YouTube-Kanal für Video-Tutorials, und folgen Sie der Vonage Entwickler-Seite auf LinkedInein Raum für Entwickler, um zu lernen und sich mit der Community zu vernetzen. Bleiben Sie in Verbindung, teilen Sie Ihre Fortschritte und halten Sie sich über die neuesten Nachrichten, Tipps und Veranstaltungen für Entwickler auf dem Laufenden!

Teilen Sie:

https://a.storyblok.com/f/270183/400x400/3f6b0c045f/amanda-cavallaro.png
Amanda CavallaroAdvokat für Entwickler