<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Vonage Developers</title>
    <description>The latest articles on Forem by Vonage Developers (@vonagedev).</description>
    <link>https://forem.com/vonagedev</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F378%2F555ac53a-0535-46ae-8d35-c875f44eb774.jpg</url>
      <title>Forem: Vonage Developers</title>
      <link>https://forem.com/vonagedev</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/vonagedev"/>
    <language>en</language>
    <item>
      <title>The Vonage Dev Discussion: Open Source</title>
      <dc:creator>Liz Acosta</dc:creator>
      <pubDate>Wed, 25 Mar 2026 16:59:12 +0000</pubDate>
      <link>https://forem.com/vonagedev/the-vonage-dev-discussion-open-source-ipb</link>
      <guid>https://forem.com/vonagedev/the-vonage-dev-discussion-open-source-ipb</guid>
      <description>&lt;p&gt;At &lt;a href="https://vonage.dev/41y34Zf" rel="noopener noreferrer"&gt;Women+ in Open Source Day&lt;/a&gt;, I got to try my hand at making a contribution to &lt;a href="https://vonage.dev/4uOwPmf" rel="noopener noreferrer"&gt;Apache Spark&lt;/a&gt;. While I didn’t manage to clone and build the project within the allotted time, I did get to speak with one of the project’s key contributors, &lt;a href="https://vonage.dev/4rQF26G" rel="noopener noreferrer"&gt;Holden Karau&lt;/a&gt;, and was inspired by her encouragement for all sorts of people to get involved.&lt;/p&gt;

&lt;p&gt;Contributing to open source can be intimidating! And in the age of AI, contributors from diverse perspectives are even more important.&lt;/p&gt;

&lt;p&gt;So for our second ever Dev Discussion, we want to know: &lt;strong&gt;What is your advice for getting started contributing to open source projects?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9i3f701wd102z9xapcdx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9i3f701wd102z9xapcdx.png" alt="A graphic of a robot with a speech bubble that reads, " width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Share your advice in the comments below along with links to some of your favorite open source projects! 🖥️ 🎉👇&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>opensource</category>
      <category>womenintech</category>
    </item>
    <item>
      <title>MCP, n8n, Symfony: New tutorials to kickstart 2026 🚀</title>
      <dc:creator>Daniela Facchinetti</dc:creator>
      <pubDate>Fri, 20 Feb 2026 11:07:25 +0000</pubDate>
      <link>https://forem.com/vonagedev/mcp-n8n-symfony-new-tutorials-to-kickstart-2026-36nm</link>
      <guid>https://forem.com/vonagedev/mcp-n8n-symfony-new-tutorials-to-kickstart-2026-36nm</guid>
      <description>&lt;p&gt;Hello Developers!&lt;/p&gt;

&lt;p&gt;Let’s kick off the new year with a quick look at our Q4 2025 launches. Then get ready for two new releases: &lt;strong&gt;Identity Insights in GA&lt;/strong&gt; plus &lt;strong&gt;Silent Authentication Advanced in Verify API&lt;/strong&gt;. And don’t forget the fresh tutorials — including AI-powered WhatsApp agents, Symfony SMS to 2FA, phone number insights, and Network APIs — to help you build smarter and more securely.&lt;/p&gt;

&lt;p&gt;Check them out and start building something amazing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;RELEASES and ANNOUNCEMENTS&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://developer.vonage.com/en/blog/vonage-q4-2025-recap-highlights-and-insights" rel="noopener noreferrer"&gt;Vonage Q4 2025 Recap: Highlights and Insights&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Last quarter doubled down on the fundamentals you count on every day. From stronger identity signals and AI-ready workflows to unified reporting and Video API improvements, the team shipped updates that make building easier and more reliable. Revisit how the updates help you build with confidence on Vonage.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="//developer.vonage.com/en/blog/identity-insights-api-now-general-available"&gt;Identity Insights API Now Generally Available&lt;/a&gt;&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Your feedback was invaluable to refine real-time, production-ready phone number intelligence for identity verification, fraud prevention, and data enrichment. And now it’s all backed by enterprise-grade support.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://developer.vonage.com/en/blog/introducing-silent-authentication-advanced-in-the-verify-api" rel="noopener noreferrer"&gt;Introducing Silent Authentication Advanced in the Verify API&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The next evolution of authentication brings seamless, device-based verification beyond cellular networks to Wi-Fi and VPN. U.S. developers can be among the first to test this next-gen authentication flow.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TUTORIALS and INSPIRATION&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://developer.vonage.com/en/blog/contribute-to-the-open-source-vonage-mcp-tooling-server" rel="noopener noreferrer"&gt;Contribute to the Open Source Vonage MCP Tooling Server&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The Vonage MCP Tooling Server lets you power AI agents across messaging and voice channels. Tap into the open-source design to add new capabilities like MMS, SIM swap checks, or Voice API features.&lt;a href="https://developer.vonage.com/en/blog/authors/benjamin-aronov" rel="noopener noreferrer"&gt; Benjamin Aronov&lt;/a&gt; shows how to add a new tool and submit a Pull Request to help shape the future of the platform.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.youtube.com/watch?v=r134zNQO1tQ" rel="noopener noreferrer"&gt;What Are Network APIs?&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://developer.vonage.com/en/blog/authors/jeremy-foster" rel="noopener noreferrer"&gt;Jeremy Foster&lt;/a&gt; provides a quick, developer-friendly intro to Vonage Network APIs. He also explains carrier-verified signals to help you verify identity, reduce fraud, and build trusted authentication experiences at scale.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://developer.vonage.com/en/blog/eliminating-hallucinations-in-llm-driven-virtual-agents" rel="noopener noreferrer"&gt;Eliminating Hallucinations in LLM-Driven Virtual Agents&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Vonage AI Studio lets you build smart, low-code virtual agents. Recent updates improve LLM accuracy, stability, and reliability.&lt;a href="http://developer.vonage.com/en/blog/authors/shir-hilel" rel="noopener noreferrer"&gt; Shir Hilel&lt;/a&gt; shares insights and how these changes make conversations more predictable and grounded.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="//developer.vonage.com/en/blog/build-a-5-node-ai-whatsapp-receptionist-with-n8n-and-vonage-mcp-tools"&gt;Build a 5-Node AI WhatsApp Receptionist With n8n and Vonage MCP Tools&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://developer.vonage.com/en/blog/authors/benjamin-aronov" rel="noopener noreferrer"&gt;Benjamin Aronov&lt;/a&gt; reviews the steps to automate guest support — such as managing routine questions, escalating urgent issues through SMS or voice, and keeping context with a simple, reusable workflow.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://developer.vonage.com/en/blog/learn-about-phone-number-validity" rel="noopener noreferrer"&gt;Learn About Phone Number Validity &lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Accurate numbers are key for one-time passwords, updates, and support efficiency. Vonage Identity Insights API helps verify numbers across formats, carriers, and reachability checks.&lt;a href="https://developer.vonage.com/en/blog/authors/amanda-cavallaro" rel="noopener noreferrer"&gt; Amanda Cavallaro&lt;/a&gt; explains how ensuring number validity improves user experience and reduces errors.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.youtube.com/watch?v=lHP943w_7Bk" rel="noopener noreferrer"&gt;Send SMS Text Message With Symfony&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Symfony keeps innovating in PHP, from API Platform to FrankenPHP. Curious about CPaaS? In this video, &lt;a href="https://developer.vonage.com/en/blog/authors/alexandra-williams" rel="noopener noreferrer"&gt;Alexandra Williams&lt;/a&gt; shows Symfony developers how to send an SMS with Vonage.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="//developer.vonage.com/en/blog/how-to-add-two-factor-authentication-with-node-js-and-express"&gt;Add Two-Factor Authentication With Node.js, Express, and Vonage&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Two-factor authentication (2FA) adds an extra layer of security using a password plus a verification token. &lt;a href="https://developer.vonage.com/en/blog/authors/julia" rel="noopener noreferrer"&gt;Julia Biro&lt;/a&gt; demonstrates 2FA implementation with Vonage Verify API and Express.js.&lt;/p&gt;

</description>
      <category>vonagenews</category>
    </item>
    <item>
      <title>The Vonage Dev Discussion: Music</title>
      <dc:creator>Liz Acosta</dc:creator>
      <pubDate>Tue, 17 Feb 2026 20:50:55 +0000</pubDate>
      <link>https://forem.com/vonagedev/the-vonage-dev-discussion-4h52</link>
      <guid>https://forem.com/vonagedev/the-vonage-dev-discussion-4h52</guid>
      <description>&lt;p&gt;Hey developers! We want to hear from you for a series we’re calling the &lt;strong&gt;Dev Discussion&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;What is the Dev Discussion? We want it to be a space where we can take a break and talk about the human side of software development.&lt;/p&gt;

&lt;p&gt;Our first Dev Discussion topic is about &lt;strong&gt;music&lt;/strong&gt; 🎶&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcmfl6w1ljwabvanxnoas.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcmfl6w1ljwabvanxnoas.jpg" alt="A stylized illustration of a robot with the text: " width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Speaking of music and tech, you’ve probably heard &lt;a href="https://www.qobuz.com/ie-en/album/opus-no-1-tim-carleton-darrick-deel/vxcde5txl6b9a" rel="noopener noreferrer"&gt;this track&lt;/a&gt; while waiting on hold ☎️🎵&lt;/p&gt;

&lt;p&gt;Did you know it was composed in 1989 by Darrick Deel and Tim Carleton, a &lt;a href="https://www.thisamericanlife.org/516/stuck-in-the-middle-2014/act-one-0" rel="noopener noreferrer"&gt;self described&lt;/a&gt;, “Yanni-loving computer nerd” who was just “messing around with a drum machine and a synthesizer” in his parents' garage in California?&lt;/p&gt;

&lt;p&gt;You can &lt;a href="https://vonage.dev/46NixYz" rel="noopener noreferrer"&gt;make it your hold music too&lt;/a&gt;! &lt;/p&gt;

&lt;p&gt;Besides cool drum machines and chill synthesizers, we want to know:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is currently playing in your headphones?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does what you listen to change according to what you are working on?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Do you ever work in complete silence?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Feel free to drop those playlists in the comments below 🎶 👇&lt;/p&gt;

</description>
      <category>music</category>
      <category>discuss</category>
      <category>api</category>
    </item>
    <item>
      <title>🎁 Holiday Update: MCP Tooling Server + LinkedIn Page</title>
      <dc:creator>Daniela Facchinetti</dc:creator>
      <pubDate>Fri, 09 Jan 2026 13:41:41 +0000</pubDate>
      <link>https://forem.com/vonagedev/holiday-update-mcp-tooling-server-linkedin-page-1iec</link>
      <guid>https://forem.com/vonagedev/holiday-update-mcp-tooling-server-linkedin-page-1iec</guid>
      <description>&lt;p&gt;Hi!&lt;/p&gt;

&lt;p&gt;An eventful 2025 closes with two big announcements: the introduction of the &lt;strong&gt;&lt;a href="https://github.com/Vonage-Community/vonage-mcp-server-api-bindings/tree/main" rel="noopener noreferrer"&gt;Vonage MCP Tooling Server&lt;/a&gt;&lt;/strong&gt; and the launch of the &lt;strong&gt;&lt;a href="http://vonage.dev/Linkedin" rel="noopener noreferrer"&gt;Vonage Developer LinkedIn Page&lt;/a&gt;&lt;/strong&gt;. Read on for more updates, fresh tutorials, and new ways to get the most out of Vonage APIs. &lt;/p&gt;

&lt;p&gt;Happy Holidays, and see you in the new year!&lt;/p&gt;

&lt;p&gt;Daniela, Developer Relations Content Manager&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;RELEASES and ANNOUNCEMENTS&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://developer.vonage.com/en/blog/introducing-the-vonage-mcp-tooling-server" rel="noopener noreferrer"&gt;Introducing the Vonage MCP Tooling Server&lt;/a&gt;&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Now, AI agents like Claude and Cursor can send messages, provision numbers, check balances, and manage your Vonage apps directly from a prompt. It’s open-source and secure, plus it comes with ready-to-use tools you can easily extend.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://developer.vonage.com/en/blog/introducing-the-new-vonage-developer-linkedin-page" rel="noopener noreferrer"&gt;Introducing the Vonage Developer LinkedIn Page&lt;/a&gt;&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Here’s your space to stay up to date with insights and news, learn, connect with the community … not to mention participate in events, webinars, contests, and more. Make sure to follow us.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://developer.vonage.com/en/blog/announcing-ssl-security-enhancements" rel="noopener noreferrer"&gt;Announcing SSL Security Enhancements&lt;/a&gt;&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;These updates keep Vonage APIs securely encrypted and compatible with modern clients — and the benefits now extend to other Vonage domains. Learn how these SSL updates help protect your data and ensure secure end-to-end communications.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TUTORIALS and INSPIRATION&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://developer.vonage.com/en/blog/spread-holiday-cheer-with-ai-agents-and-vonage-mcp-messaging-tools" rel="noopener noreferrer"&gt;Spread Holiday Cheer With AI Agents and Vonage MCP Messaging Tools&lt;/a&gt;&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;One-size-fits-all messaging no longer works. Some users prefer SMS, others like WhatsApp, and RCS adoption is growing fast.&lt;a href="https://developer.vonage.com/en/blog/authors/benjamin-aronov" rel="noopener noreferrer"&gt; Benjamin Aronov&lt;/a&gt; shows how to integrate an AI agent with the Vonage MCP Server to send holiday messages that automatically respect preferences, channels, and even language.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://developer.vonage.com/en/blog/monitor-your-webhooks-with-laravel-nightwatch" rel="noopener noreferrer"&gt;Monitor Your Webhooks With Laravel Nightwatch&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Monitoring PHP applications can be daunting. Laravel Nightwatch changes that with a native, easy-to-use way to track application events and performance.&lt;a href="https://developer.vonage.com/en/blog/authors/james-seconde" rel="noopener noreferrer"&gt; Jim Seconde&lt;/a&gt; spins up a simple webhook and monitors it all through the Nightwatch dashboard.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.youtube.com/watch?v=LNH1cfTVcG8" rel="noopener noreferrer"&gt;Send and Receive WhatsApp Messages With Python&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://developer.vonage.com/en/blog/authors/alexandra-williams" rel="noopener noreferrer"&gt;Alexandra Williams&lt;/a&gt; teaches you to use Flask to send and receive messages — without the full Vonage app or WhatsApp Business Account — making it the fastest way to experiment with Vonage Messages API.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://developer.vonage.com/en/blog/improve-the-user-video-experience-with-real-time-quality-monitoring" rel="noopener noreferrer"&gt;Improve the User Video Experience With Real-Time Quality Monitoring &lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Did you know there’s a standard for how good your video looks and feels? The Mean Opinion Score (MOS) bridges the gap between technical metrics like jitter and latency with actual user satisfaction.&lt;a href="https://developer.vonage.com/en/blog/authors/amanda-cavallaro" rel="noopener noreferrer"&gt; Amanda Cavallaro&lt;/a&gt; explains MOS, why it’s subjective, and how your Vonage video application can use it to enhance user experience.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://developer.vonage.com/en/blog/identity-insights-api-use-cases-for-fraud-prevention" rel="noopener noreferrer"&gt;Identity Insights API Use Cases for Fraud Prevention &lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Fraud threats are evolving fast, with AI-driven scams targeting businesses of all sizes. Staying ahead requires smarter detection, stronger prevention, and constant vigilance.&lt;a href="https://developer.vonage.com/en/blog/authors/amanda-cavallaro" rel="noopener noreferrer"&gt; Amanda Cavallaro&lt;/a&gt; explores four identity insights use cases and how Vonage Identity Insights API provides real-time access to carrier, subscriber, and device data to help combat fraud.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;EVENTS&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://luma.com/347t02d7" rel="noopener noreferrer"&gt;Laravel Community Meetup&lt;/a&gt;&lt;/strong&gt; (London, 21 Jan.) &lt;/p&gt;

&lt;p&gt;The Vonage London office is hosting the next Laravel community meetup. Join us for an evening of networking, great talks, and friendly faces. Whether you’re a long-time member or brand new to the community, we’d love to see you there.&lt;/p&gt;

</description>
      <category>vonagenews</category>
    </item>
    <item>
      <title>Now live: U.S. Network APIs + Video API updates</title>
      <dc:creator>Daniela Facchinetti</dc:creator>
      <pubDate>Fri, 28 Nov 2025 17:19:10 +0000</pubDate>
      <link>https://forem.com/vonagedev/now-live-us-network-apis-video-api-updates-4fk0</link>
      <guid>https://forem.com/vonagedev/now-live-us-network-apis-video-api-updates-4fk0</guid>
      <description>&lt;p&gt;Hi!&lt;/p&gt;

&lt;p&gt;November brings exciting news: the launch of &lt;strong&gt;Network APIs in the U.S&lt;/strong&gt; and &lt;strong&gt;important Video API updates&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;As always, we bring you fresh tutorials to explore — including guides on &lt;strong&gt;RCS&lt;/strong&gt;, &lt;strong&gt;MCP&lt;/strong&gt;, and &lt;strong&gt;Laravel&lt;/strong&gt; — perfect for levelling up your developer skills. Stay tuned, dive in, and make the most of these updates to supercharge your projects. &lt;/p&gt;

&lt;p&gt;Best,&lt;/p&gt;

&lt;p&gt;Daniela - Developer Relations Content Manager @ Vonage&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;RELEASES and ANNOUNCEMENTS&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://developer.vonage.com/en/blog/vonage-launches-first-aggregated-network-apis-in-the-u-s-" rel="noopener noreferrer"&gt;Vonage Launches First Aggregated Network APIs in the U.S.&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Vonage brings aggregated Network API access for AT&amp;amp;T, T-Mobile, and Verizon. Developers can now tap into carrier-verified insights with a single integration to enable smarter, real-time identity, security, and connectivity features — minus individual carrier complexities.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://developer.vonage.com/en/blog/vonage-reports-api-now-supports-video-api" rel="noopener noreferrer"&gt;Vonage Reports API Now Supports Video API&lt;/a&gt;&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Attention Unified Dashboard users — track all your Video, SMS, Messages, Voice, and Verify analytics in a single, easy-to-use interface.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://developer.vonage.com/en/blog/announcing-v1-3-0-of-the-vonage-video-reference-app-for-react" rel="noopener noreferrer"&gt;Announcing v1.3.0 of the Vonage Video Reference App for React&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The latest release introduces major UX upgrades, polished interfaces, and enhanced backend customization.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://developer.vonage.com/en/blog/announcing-v2-32-0-of-the-vonage-video-api" rel="noopener noreferrer"&gt;Announcing v2.32.0 of the Vonage Video API&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You’ll enjoy advanced monitoring tools, finer video quality control across all major SDKs, and numerous stability and performance improvements, especially for web and iOS.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TUTORIALS and INSPIRATION&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://developer.vonage.com/en/blog/step-by-step-adding-vonage-apis-to-your-ai-agent-with-mcp" rel="noopener noreferrer"&gt;Step-by-Step: Adding Vonage APIs to Your Agent With MCP&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://developer.vonage.com/en/blog/authors/christankersley" rel="noopener noreferrer"&gt;Chris Tankerlsey&lt;/a&gt; guides you on how to create a chatbot using Anthropic Claude API and the Vonage Model Context Protocol (MCP) Tooling Server. So go ahead and chat, plus perform actions like checking account balances.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.youtube.com/watch?v=UOA1lLa9uLs" rel="noopener noreferrer"&gt;Introducing MCP: AI Meets Programmable Communications With Vonage&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;AI agents can now handle tasks like “Send a text” with no code required. The Model Context Protocol (MCP) makes it possible by giving agents access to APIs and data across systems.&lt;a href="https://developer.vonage.com/en/blog/authors/alexandra-williams" rel="noopener noreferrer"&gt; Alexandra Williams&lt;/a&gt; details how Vonage is adopting this open standard with our newly launched Documentation MCP Server.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://developer.vonage.com/en/blog/integrate-rcs-into-your-authentication-workflows" rel="noopener noreferrer"&gt;Integrate RCS Into Your Authentication Workflows&lt;/a&gt;&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;RCS brings SMS into the modern era with features like verified branding and read receipts.&lt;a href="https://developer.vonage.com/en/blog/authors/amanda-cavallaro" rel="noopener noreferrer"&gt; Amanda Cavallaro&lt;/a&gt; shows how to integrate RCS-based 2FA using Vonage Verify API, with automatic fallback to SMS when needed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://developer.vonage.com/en/blog/sandbox-quickstart-send-and-receive-whatsapp-messages-with-python" rel="noopener noreferrer"&gt;Sandbox Quickstart: Send and Receive WhatsApp Messages With Python&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It’s time to test a chatbot, build a quick messaging prototype, and explore Vonage Messages API.&lt;a href="https://developer.vonage.com/en/blog/authors/benjamin-aronov" rel="noopener noreferrer"&gt; Benjamin Aronov&lt;/a&gt; shows you how to send and receive WhatsApp messages using Python and the Vonage WhatsApp Sandbox — with no need for a full app setup or WhatsApp Business Account (WABA).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://developer.vonage.com/en/blog/the-laravel-ai-experience-coding-basic-rcs-functionality" rel="noopener noreferrer"&gt;The Laravel AI Experience: Coding Basic RCS Functionality &lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;AI is rapidly changing the developer experience, from tools like LaraCopilot to specialized MCP servers such as Laravel Boost.&lt;a href="https://developer.vonage.com/en/blog/authors/james-seconde" rel="noopener noreferrer"&gt; Jim Seconde&lt;/a&gt; explores how AI can help you prototype a Laravel app that sends and receives RCS messages, highlighting the new possibilities in PHP and Laravel development.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://developer.vonage.com/en/blog/laravel-12-starter-kits-explained-react-vue-and-livewire" rel="noopener noreferrer"&gt;Laravel 12 Starter Kits Explained: React, Vue, and Livewire&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The updated Laravel 12 starter kits simplify setup. Choose React, Vue, or Livewire to match your preferred workflow and get routes, controllers, and authentication ready out of the box.&lt;a href="https://developer.vonage.com/en/blog/authors/diana-pham" rel="noopener noreferrer"&gt; Diana Pham&lt;/a&gt; shows what each kit offers and how to find the best fit for your next Laravel app.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;EVENTS&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://reinvent.awsevents.com/" rel="noopener noreferrer"&gt;AWS re:Invent&lt;/a&gt;&lt;/strong&gt;(Las Vegas, 1 to 5 Dec.)&lt;/p&gt;

&lt;p&gt;The Vonage Developer Ecosystem team is headed to Vegas. If your startup will be there, we’d love to connect. Book a meeting at: &lt;a href="mailto:startups@vonage.com"&gt;startups@vonage.com&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>vonagenews</category>
    </item>
    <item>
      <title>🚀New Reports API, Documentation MCP Server, RCS tutorials</title>
      <dc:creator>Daniela Facchinetti</dc:creator>
      <pubDate>Mon, 03 Nov 2025 12:59:07 +0000</pubDate>
      <link>https://forem.com/vonagedev/new-reports-api-documentation-mcp-server-rcs-tutorials-2kaf</link>
      <guid>https://forem.com/vonagedev/new-reports-api-documentation-mcp-server-rcs-tutorials-2kaf</guid>
      <description>&lt;p&gt;Hi!&lt;/p&gt;

&lt;p&gt;This month brings some big updates: the launch of our new &lt;strong&gt;Reports API&lt;/strong&gt; and the &lt;strong&gt;Documentation MCP Server&lt;/strong&gt;. You’ll also find plenty of fresh content, from deep dives into &lt;strong&gt;RCS&lt;/strong&gt; to hands-on tutorials that showcase what’s possible with our APIs. Plus, don’t miss your chance to &lt;strong&gt;join our Developer Community survey&lt;/strong&gt; or &lt;strong&gt;meet us at an upcoming event&lt;/strong&gt;. We’d love to hear from you!&lt;/p&gt;

&lt;p&gt;Daniela (Developer Relations Content Manager @ Vonage)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;RELEASES and ANNOUNCEMENTS&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://developer.vonage.com/en/blog/introducing-the-reports-api-by-vonage" rel="noopener noreferrer"&gt;Introducing Vonage Reports API&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;No more stitching data from multiple sources. Get a centralized, consistent view of your communications in one place. Track delivery status, view billing info, detect fraud, and feed live data into your own dashboards with ease.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://developer.vonage.com/en/blog/vonage-q3-2025-highlights-new-apis-tools-and-features" rel="noopener noreferrer"&gt;Vonage Q3 2025 Highlights: New APIs, Tools, and Features&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Q3 was all about giving developers more power with less friction. We launched Beta Identity Insights API, added smarter post-call tools with AI summaries, improved messaging reliability, made video calls smoother with scalable video coding and live captions, and more!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://developer.vonage.com/en/blog/introducing-the-vonage-documentation-mcp-server" rel="noopener noreferrer"&gt;Introducing the Vonage Documentation MCP Server&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Vonage Documentation MCP Server gives you access to Vonage Docs directly from your development environment or AI assistant. Whether in VS Code, Cursor, or with tools like Claude, documentation is now right where you need it, without interrupting your workflow.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SURVEY&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://wkf.ms/45VWSfI" rel="noopener noreferrer"&gt;Your Viewpoint Questionnaire — Developer Community &lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The Vonage Developer Community offers workspaces, channels, events, and activities to help developers connect and support one another. We’d love your feedback to improve the Developer Community.&lt;a href="https://wkf.ms/45VWSfI" rel="noopener noreferrer"&gt; Complete the questionnaire&lt;/a&gt; &lt;strong&gt;by Nov. 30, 2025, *&lt;em&gt;to receive a *&lt;/em&gt;€10 Vonage coupon&lt;/strong&gt;. Limited to one entry per person. Open to Vonage Viewpoint User Group participants only.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TUTORIALS and INSPIRATION&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://developer.vonage.com/en/blog/introducing-mcp-ai-meets-programmable-communications-with-vonage" rel="noopener noreferrer"&gt;Introducing MCP: AI Meets Programmable Communications With Vonage&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;With the new Model Context Protocol (MCP), agents can dynamically discover and use tools and APIs. &lt;a href="https://developer.vonage.com/en/blog/authors/benjamin-aronov" rel="noopener noreferrer"&gt;Benjamin Aronov&lt;/a&gt; explains how Vonage is bringing this to life with our Documentation MCP Server and upcoming Tooling Server.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://developer.vonage.com/en/blog/rcs-messaging-with-laravel-livewire-reverb-and-echo" rel="noopener noreferrer"&gt;RCS LLRE: RCS With Laravel, Livewire, Reverb, and Echo &lt;/a&gt;&lt;/strong&gt;&lt;br&gt;
What better way to show off Laravel Livewire’s real-time power than building an RCS messenger? &lt;a href="https://developer.vonage.com/en/blog/authors/james-seconde" rel="noopener noreferrer"&gt;James Seconde&lt;/a&gt; combines Laravel Livewire with Vonage Messages API to create a sleek, real-time messaging app.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.youtube.com/watch?v=K0mpmFMYO8A" rel="noopener noreferrer"&gt;Play an Audio File Into a Voice Call With PHP&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Curious how automated calls work for businesses? &lt;a href="https://developer.vonage.com/en/blog/authors/alexandra-williams" rel="noopener noreferrer"&gt;Alexandra Williams&lt;/a&gt; demonstrates how to send an automated voice call and play an audio file when the call is answered using Vonage PHP SDK.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://developer.vonage.com/en/blog/combine-google-ai-with-vonage-rcs-for-visual-forecasts" rel="noopener noreferrer"&gt;Send Visual Weather Forecasts With Vonage RCS and Google AI&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In this tutorial, &lt;a href="https://developer.vonage.com/en/blog/authors/amanda-cavallaro" rel="noopener noreferrer"&gt;Amanda Cavallaro&lt;/a&gt; builds a Node.js app that fetches the weather, generates a descriptive image with Google’s Imagen, creates a short summary using Gemini, and sends it all as a rich RCS card via Vonage Messages API. Create interactive, visually engaging weather updates for your users in just a few steps!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://developer.vonage.com/en/blog/detect-sim-swap-fraud-with-go-and-vonage" rel="noopener noreferrer"&gt;Detect SIM Swap Fraud With Go and Vonage&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;SMS-based 2FA can be vulnerable to SIM swap attacks, where fraudsters hijack your number to steal security codes. With Vonage Identity Insights API, you can detect SIM swaps in real time. &lt;a href="https://developer.vonage.com/en/blog/authors/benjamin-aronov" rel="noopener noreferrer"&gt;Benjamin Aronov&lt;/a&gt; shows how to integrate it with Go (Golang) to keep your users safe&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://developer.vonage.com/en/blog/getting-started-with-the-vonage-live-captions-api-in-node-js" rel="noopener noreferrer"&gt;Getting Started With the Vonage Live Captions API in Node.js&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Add live captions to your video for accessibility and better focus! &lt;a href="https://developer.vonage.com/en/blog/authors/dwanehemmings" rel="noopener noreferrer"&gt;Dwane Hemmings&lt;/a&gt; walks you through integrating Live Captions API, with support for multiple languages and a one-click GitHub sample.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://developer.vonage.com/en/blog/using-jwt-for-authentication-in-a-golang-application-dr" rel="noopener noreferrer"&gt;JWT Authentication in Go With Gin&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Learn how to build secure JWT authentication in Go with Gin using golang-jwt/jwt/v5. In this guide, &lt;a href="https://developer.vonage.com/en/blog/authors/benjamin-aronov" rel="noopener noreferrer"&gt;Benjamin Aronov&lt;/a&gt; covers access and refresh tokens, HttpOnly cookies, Redis-based revocation, and Vonage API integration.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;EVENTS&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://live360events.com/home.aspx" rel="noopener noreferrer"&gt;Live!360&lt;/a&gt;&lt;/strong&gt; (Orlando, Nov. 18-19)&lt;/p&gt;

&lt;p&gt;We’re heading to Live! 360, the ultimate tech conference for devs, data pros, and IT leaders. Swing by our booth, grab some swag, and let’s connect!&lt;/p&gt;

</description>
      <category>vonagenews</category>
    </item>
    <item>
      <title>🚀New Identity Insights API + RCS Tutorials and Events</title>
      <dc:creator>Daniela Facchinetti</dc:creator>
      <pubDate>Fri, 26 Sep 2025 14:19:25 +0000</pubDate>
      <link>https://forem.com/vonagedev/vonage-developer-newsletter-sept-2025-new-identity-insights-api-rcs-tutorials-and-events-303d</link>
      <guid>https://forem.com/vonagedev/vonage-developer-newsletter-sept-2025-new-identity-insights-api-rcs-tutorials-and-events-303d</guid>
      <description>&lt;p&gt;Hi!&lt;/p&gt;

&lt;p&gt;September brings a new API - &lt;strong&gt;Identity Insights&lt;/strong&gt; — plus major &lt;strong&gt;Video API improvements.&lt;/strong&gt; The &lt;strong&gt;Vonage Viewpoint Questionnaire&lt;/strong&gt; is ready for your feedback. You’ll also find fresh tutorials on &lt;strong&gt;RCS and SIM swap&lt;/strong&gt; fraud … not to mention the latest tech trends. And get ready for a busy events season. Circle the dates and come meet the team.&lt;/p&gt;

&lt;p&gt;Daniela (Developer Relations Content Manager @ Vonage)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SURVEY&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://wkf.ms/45VWSfI" rel="noopener noreferrer"&gt;Your Viewpoint Questionnaire&lt;/a&gt;&lt;/strong&gt; — Developer Community &lt;/p&gt;

&lt;p&gt;The Vonage Developer Community offers workspaces, channels, events, and activities to help developers connect and support one another. We’d love your feedback to improve the Developer Community.&lt;a href="https://wkf.ms/45VWSfI" rel="noopener noreferrer"&gt; Complete the questionnaire&lt;/a&gt; &lt;strong&gt;by November 30, 2025, *&lt;em&gt;to receive a *&lt;/em&gt;€10 Vonage coupon&lt;/strong&gt;. Limited to one entry per person. Open to Vonage Viewpoint User Group participants only.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;RELEASES and ANNOUNCEMENTS&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://developer.vonage.com/en/blog/identity-insights-api-now-in-beta" rel="noopener noreferrer"&gt;Identity Insights API Now in Beta&lt;/a&gt;&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;It’s time to access powerful mobile network features that simplify the understanding and manipulation of phone number data. Look at what’s possible and how to get started.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://developer.vonage.com/en/blog/vp9-svc-in-vonage-video-api-released-into-general-availability" rel="noopener noreferrer"&gt;VP9 SVC in Vonage Video API Released for General Availability&lt;/a&gt;&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;VP9 offers better video quality at lower bandwidths, making it ideal for bandwidth-constrained networks. SVC enables video streams to dynamically adapt to network conditions and device capabilities. This enables more efficient, resilient, and scalable video experiences.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://developer.vonage.com/en/blog/announcing-v2-31-0-of-the-vonage-video-api" rel="noopener noreferrer"&gt;Announcing v2.31.0 of Vonage Video API&lt;/a&gt;&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;The latest update introduces new features and enhancements to Vonage Video Client SDKs — which boost bandwidth management, session moderation, and telephony integration. All to help you build high-quality video apps faster and more reliably.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://developer.vonage.com/en/blog/now-receive-audio-with-the-vonage-video-api-audio-connector" rel="noopener noreferrer"&gt;Now Receive Audio With the Vonage Video API Audio Connector&lt;/a&gt;&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;You can now send audio back into your sessions just as easily as you receive it. This update simplifies integration with voice services — including OpenAI, voice-to-text tools, and agentic bots — all through a single WebSocket. See the release blog post and start using bi-directional audio today.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TUTORIALS&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://developer.vonage.com/en/blog/build-a-real-time-interactive-rcs-experience-with-node-js-and-vonage" rel="noopener noreferrer"&gt;Build a Real-Time Interactive RCS Experience With Node.js and Vonage&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://developer.vonage.com/en/blog/authors/benjamin-aronov" rel="noopener noreferrer"&gt;Benjamin Aronov&lt;/a&gt; shows how to create interactive messaging experiences using suggested replies, rich cards, and carousels in a single seamless journey. Build richer, real-time conversations for sports, music, or any live event with Vonage Messages API.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="//developer.vonage.com/en/blog/prevent-sim-swap-fraud-in-python-with-the-identity-insights-api"&gt;Prevent SIM Swap Fraud in Python With Identity Insights API&lt;/a&gt;&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;SIM swap fraud is a growing mobile security threat, with attackers hijacking phone numbers and intercepting calls, texts, and 2FA codes.&lt;a href="https://developer.vonage.com/en/blog/authors/benjamin-aronov" rel="noopener noreferrer"&gt; Benjamin Aronov&lt;/a&gt; uses Vonage Identity Insights API in Python to detect potential SIM swaps and keep your users safe.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://developer.vonage.com/en/blog/how-vonage-uses-camara-apis-to-improve-developer-experience" rel="noopener noreferrer"&gt;How Vonage Uses CAMARA APIs to Improve Developer Experience&lt;/a&gt;&lt;span&gt; &lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Vonage fully supports open standards like CAMARA to simplify access to network capabilities. Rather than standalone endpoints, we’ve embedded CAMARA APIs directly into our products to give developers more flexibility and a smoother experience.&lt;a href="https://developer.vonage.com/en/blog/authors/alvaro-navarro" rel="noopener noreferrer"&gt; Alvaro Navarro&lt;/a&gt; offers real examples of how this approach enhances Vonage APIs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://developer.vonage.com/en/blog/man-in-the-loop-vs-llm-in-the-loop" rel="noopener noreferrer"&gt;Man in the Loop vs. LLM in the Loop&lt;/a&gt;&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Vonage AI is rethinking speech-to-text benchmarking by combining human oversight with automation. The teams use large language models (LLMs) to generate consensus transcriptions from multiple STT outputs — which then enable scalable, unbiased, and context-aware evaluation.&lt;a href="https://developer.vonage.com/en/blog/authors/yotam-luz" rel="noopener noreferrer"&gt;Yotam Luz&lt;/a&gt; compares this approach with traditional methods and the key insights from our experiments.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://youtu.be/fGihAo1NpMw" rel="noopener noreferrer"&gt;Send an SMS Message With PHP&lt;/a&gt;&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;&lt;a href="https://developer.vonage.com/en/blog/authors/alexandra-williams" rel="noopener noreferrer"&gt;Alexandra Williams&lt;/a&gt; offers a step-by-step tutorial using the Vonage PHP SDK. This includes everything you need to quickly begin … such as setting up, writing your script, and creating a POST route.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;EVENTS&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://devfest.gdgnantes.com/en" rel="noopener noreferrer"&gt;Devfest Nantes&lt;/a&gt;&lt;/strong&gt;(Nantes, Oct. 16 to 17)&lt;br&gt;
The Vonage booth is where you’ll experience spellbinding live demos, gather mystical swag, and immerse yourself in the wonders of our APIs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.apiaddicts.org/apiaddictsdays/" rel="noopener noreferrer"&gt;APIAddictsDays25&lt;/a&gt;&lt;/strong&gt; (Madrid, Oct. 22) [25SEP_DEV-NEWS_IMGS_API-DAYS]&lt;/p&gt;

&lt;p&gt;The largest API event in Spanish discusses security, design, architecture, business models, and the latest API developments. Say hello at the Vonage booth and don’t miss Alvaro Navarro and his talk:&lt;a href="https://www.apiaddicts.org/apiaddictsdays/agenda/" rel="noopener noreferrer"&gt;Cómo evitar el derrumbe: diseña tus APIs antes de poner el primer ladrillo&lt;/a&gt; at 1:15 pm.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://2025.allthingsopen.org/" rel="noopener noreferrer"&gt;All Things Open (ATO)&lt;/a&gt;&lt;/strong&gt;(Raleigh, Oct. 12 to 14) &lt;br&gt;
ATO is the largest open-source and technology conference in the eastern United States. Stop by the Vonage booth and meet the team.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://longhornphp.com/" rel="noopener noreferrer"&gt;Longhorn PHP&lt;/a&gt;&lt;/strong&gt; (Austin, Oct. 23 to 25) &lt;br&gt;
The conference helps PHP developers improve their skills, learn about modern PHP development, and connect with the wider PHP community. Be sure to visit the Vonage booth and don’t miss &lt;a href="https://developer.vonage.com/de/blog/authors/chuck-reeves" rel="noopener noreferrer"&gt;Chuck Reeves&lt;/a&gt;’s talk “&lt;a href="https://longhornphp.com/sessions#php-security-mechanisms-you-arent-using" rel="noopener noreferrer"&gt;PHP Security Mechanisms You Aren't Using&lt;/a&gt;”.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.youtube.com/watch?v=JZ7ztYVRXIM" rel="noopener noreferrer"&gt;Vonage CodeConnect Webinar — Stopping Fraud Before It Happens: Smarter Security for Banking&lt;/a&gt;&lt;/strong&gt; (Online, Oct. 30) &lt;/p&gt;

&lt;p&gt;Fraud is on the rise — from account takeovers to SIM swaps — and traditional authentication can’t keep up. Join our webinar to see how Vonage Verify and Identity Insights APIs help fintechs and banks stay a step ahead with stronger security.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.youtube.com/@VonageDev" rel="noopener noreferrer"&gt;Vonage CodeConnect Webinar Replays (online)&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Missed the Vonage CodeConnect webinars? Enjoy the replays:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://youtu.be/dxP-30_LhVQ" rel="noopener noreferrer"&gt;Frictionless Security: Adding Silent Authentication to Your iOS Application&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=Y4Qzcqc2yKE" rel="noopener noreferrer"&gt;Real-Time Fan Experiences With RCS: Build Interactive Sports and Music Broadcasts in Node.js&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=xPUc8Df348A" rel="noopener noreferrer"&gt;Detect SIM Swap Fraud With Enterprise-Level Security Checks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://youtu.be/gX-UCcRtnq0" rel="noopener noreferrer"&gt;Build a Real-Time Live Stream Platform With Vonage APIs: Video Chat, Text Chat, Screen Share, and Rewards That Scale&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>vonagenews</category>
    </item>
    <item>
      <title>How to Send RCS Rich Card Carousels With Node.js</title>
      <dc:creator>Benjamin Aronov</dc:creator>
      <pubDate>Fri, 12 Sep 2025 15:23:13 +0000</pubDate>
      <link>https://forem.com/vonagedev/how-to-send-rcs-rich-card-carousels-with-nodejs-15n6</link>
      <guid>https://forem.com/vonagedev/how-to-send-rcs-rich-card-carousels-with-nodejs-15n6</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://developer.vonage.com/en/blog/rcs-business-messaging-is-now-in-the-vonage-messages-api" rel="noopener noreferrer"&gt;Rich Communication Services (RCS)&lt;/a&gt; gives you the tools to build modern, interactive brand experiences right inside a user’s default messaging app. Among its most powerful features is the rich card carousel: a horizontally scrollable set of cards that can include videos, images, text, and tappable actions.&lt;/p&gt;

&lt;p&gt;In this tutorial, you’ll learn how to send an RCS carousel using Node.js and the &lt;a href="https://developer.vonage.com/en/messages/overview" rel="noopener noreferrer"&gt;Vonage Messages API&lt;/a&gt;. You’ll combine video and image cards with actions to boost engagement.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&amp;gt;&amp;gt; TL;DR: View the full working &lt;a href="https://github.com/Vonage-Community/tutorial-messages-node-rcs_carousel-rich-card/tree/main" rel="noopener noreferrer"&gt;code on GitHub&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://youtu.be/ORSlt1nAHbA" rel="noopener noreferrer"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Use Case: Fashion Popup Announcement
&lt;/h2&gt;

&lt;p&gt;Let’s say your brand is launching a limited-time fashion pop-up shop. You want to generate buzz and showcase key items. With an RCS carousel, you can package this all in one clean, interactive message.&lt;/p&gt;

&lt;p&gt;Your RCS carousel will include media and suggested actions:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Card 1: Event Launch Video

&lt;ul&gt;
&lt;li&gt;Video trailer for the popup&lt;/li&gt;
&lt;li&gt;2 actions: “Save the Date” and “See Location”&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Card 2: T-Shirts image:

&lt;ul&gt;
&lt;li&gt;An image of the featured tee&lt;/li&gt;
&lt;li&gt;action: “See All Shirts”&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Card 3: Hats image:

&lt;ul&gt;
&lt;li&gt;An image of your hat collection&lt;/li&gt;
&lt;li&gt;action: “See All Hats”&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  What Is an RCS Carousel?
&lt;/h2&gt;

&lt;p&gt;An RCS carousel is a set of swipeable rich cards, each with its own:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A title (max 200 characters)&lt;/li&gt;
&lt;li&gt;A description (max 2000 characters)&lt;/li&gt;
&lt;li&gt;Media: image or video&lt;/li&gt;
&lt;li&gt;Up to four suggested replies or actions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The cards appear horizontally, allowing users to swipe through them.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1jc3qgo2yhhzbb2dwku6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1jc3qgo2yhhzbb2dwku6.png" alt="Illustration of an RCS carousel message in the Android Messages app, annotated to show benefits like trusted branding, verified sender ID, richer media cards, time-saving action buttons, and quick-reply suggestions." width="687" height="577"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Important notes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;All cards in a carousel must use the same type of suggestion.&lt;/li&gt;
&lt;li&gt;Media files must be publicly accessible and under 100MB.&lt;/li&gt;
&lt;li&gt;You can include between 2 and 10 cards.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;p&gt;Before you start, you’ll need:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://nodejs.org/en/download" rel="noopener noreferrer"&gt;Node.js installed&lt;/a&gt; on your machine.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://ngrok.com/downloads/mac-os" rel="noopener noreferrer"&gt;ngrok installed&lt;/a&gt; for exposing your local server to the internet.&lt;/li&gt;
&lt;li&gt;A Vonage API account.&lt;/li&gt;
&lt;li&gt;A registered RCS Business Messaging (RBM) Agent, see managed accounts below.&lt;/li&gt;
&lt;li&gt;A phone with RCS capabilities for testing.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Vonage API Account
&lt;/h3&gt;

&lt;p&gt;To complete this tutorial, you will need a &lt;a href="https://developer.vonage.com/sign-up" rel="noopener noreferrer"&gt;Vonage API account&lt;/a&gt;. If you don’t have one already, you can sign up today and start building with free credit. Once you have an account, you can find your API Key and API Secret at the top of the &lt;a href="https://dashboard.nexmo.com/" rel="noopener noreferrer"&gt;Vonage API Dashboard&lt;/a&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  Ready to start building?
&lt;/h4&gt;

&lt;p&gt;Experience seamless connectivity, real-time messaging, and crystal-clear voice and video calls—all at your fingertips.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Contact Your Vonage Account Manager
&lt;/h2&gt;

&lt;p&gt;In order to send and receive RCS capabilities in your Vonage application, you will need to have a registered Rich Business Messaging (RBM) agent and a &lt;a href="https://api.support.vonage.com/hc/en-us/articles/16711304811932-How-can-I-check-if-RCS-Rich-Communication-Services-is-active-on-my-device" rel="noopener noreferrer"&gt;phone with RCS capabilities&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Currently, RCS Messaging through Vonage is only available for managed accounts. You will need to contact your account manager to request Developer Mode activation for your RBM agent. Developer Mode allows you to test RCS messaging to allow-listed numbers before completing the Agent Verification process and launching in production.&lt;/p&gt;

&lt;p&gt;Please &lt;a href="https://www.vonage.com/contact-us/" rel="noopener noreferrer"&gt;contact our sales team&lt;/a&gt; if you do not have a managed account. &lt;/p&gt;

&lt;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Understand the &lt;a href="https://api.support.vonage.com/hc/en-us/articles/15546468078108-Understanding-RCS-and-RBM" rel="noopener noreferrer"&gt;difference between RCS and RBM&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;


&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  How to Set Up Your Node.js Project
&lt;/h2&gt;

&lt;p&gt;This guide assumes you're familiar with JavaScript and Node.js basics. &lt;/p&gt;

&lt;h3&gt;
  
  
  Initialize the Project
&lt;/h3&gt;

&lt;p&gt;Create a new directory and initialize a Node.js project:&lt;/p&gt;

&lt;h3&gt;
  
  
  Install Required NPM Packages
&lt;/h3&gt;

&lt;p&gt;Install the necessary node packages with &lt;a href="https://www.npmjs.com/" rel="noopener noreferrer"&gt;Node Package Manager&lt;/a&gt; (NPM):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.npmjs.com/package/express" rel="noopener noreferrer"&gt;express&lt;/a&gt;: Creates the web server&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.npmjs.com/package/dotenv" rel="noopener noreferrer"&gt;dotenv&lt;/a&gt;: Loads your environment variables&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.npmjs.com/package/@vonage/server-sdk" rel="noopener noreferrer"&gt;@vonage/server-sdk&lt;/a&gt;: Sends messages through the Vonage Messages API&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Create Your Project Files
&lt;/h3&gt;

&lt;p&gt;Create the main application file and environment configuration file:&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Configure Your Environment
&lt;/h2&gt;

&lt;p&gt;In the .env file, add your Vonage credentials and configuration:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt; VONAGE_APPLICATION_ID: Your Vonage application ID.&lt;/li&gt;
&lt;li&gt;VONAGE_API_SIGNATURE_SECRET= Your Vonage API Secret&lt;/li&gt;
&lt;li&gt;VONAGE_PRIVATE_KEY: Your Vonage application’s private key file.&lt;/li&gt;
&lt;li&gt;RCS_SENDER_ID: Your RBM SenderID (the Name of the Brand). The SenderID requires special formatting, such as not having any spaces. Check with your account manager if you’re unsure.&lt;/li&gt;
&lt;li&gt;PORT: Port number for the Express server.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You will obtain your Vonage Application ID and private.key file below, in the &lt;em&gt;“How to Create and Configure Vonage Application”&lt;/em&gt; section. Find your API Secret in the &lt;a href="https://dashboard.vonage.com/" rel="noopener noreferrer"&gt;developer dashboard homepage&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Send an RCS Carousel
&lt;/h2&gt;

&lt;p&gt;Now that your environment is set up, let’s write the code that actually sends your RCS rich card carousel.&lt;/p&gt;

&lt;p&gt;In this step, you’ll create an Express server that sends a custom RCS message using the Vonage Messages API. The carousel will contain three swipeable product cards, each with media (video or image), a title and description, and actionable buttons your users can tap.&lt;/p&gt;

&lt;h3&gt;
  
  
  Load Dependencies and Initialize the Vonage Client
&lt;/h3&gt;

&lt;p&gt;We’ll start by importing the necessary packages, loading your environment variables, and initializing the Vonage client. Add the following code to your index.js file to get things going:&lt;/p&gt;

&lt;h3&gt;
  
  
  Define an Express Endpoint to Send a RCS Carousel
&lt;/h3&gt;

&lt;p&gt;A few small but important details are worth knowing before we send the carousel. All media files must be publicly accessible over HTTPS, ideally hosted on a CDN or cloud storage. We’re using GitHub-hosted assets for simplicity in this example, but in production, you’ll want faster, more reliable media hosting. &lt;/p&gt;

&lt;p&gt;&lt;em&gt;&amp;gt;&amp;gt; Keep individual media files under 100MB to meet RCS constraints.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Each card includes one or more action buttons using postbackData, openUrlAction, or createCalendarEventAction. The postbackData value is a short string (50 characters max) that your server can use to track what users tap. You can also link directly to maps or pre-filled calendar events for added interactivity, making the carousel feel more like a mini-app than just a message.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Receive RCS Suggested Actions via Webhooks
&lt;/h2&gt;

&lt;p&gt;Sending off a carousel is great! But wouldn’t it be nice to know if your user interacted with your carousel?  With Vonage webhooks, you can do just that.&lt;/p&gt;

&lt;p&gt;Create the following endpoint, which will handle inbound RCS requests from our Vonage application. This code:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Validates that the request is coming from Vonage using a JWT signature&lt;/li&gt;
&lt;li&gt;Looks for the button property since you’re expecting an action instead of a reply property, and stores the payload in userAction&lt;/li&gt;
&lt;li&gt;Logs the userAction to our Node server to see what the user selected&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How to Define Your Express Server
&lt;/h2&gt;

&lt;p&gt;At the bottom of your index.js, add this code to build your Express server.&lt;/p&gt;

&lt;p&gt;And finally run your server from the command line:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&amp;gt;&amp;gt; &lt;a href="https://github.com/Vonage-Community/tutorial-messages-node-rcs_carousel-rich-card/tree/main" rel="noopener noreferrer"&gt;See the full index.js file.&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Expose Your Server with ngrok
&lt;/h2&gt;

&lt;p&gt;To receive webhooks from Vonage, your local server must be accessible over the internet. Use ngrok to expose your server by running the following command in a separate tab from your Express sever:&lt;/p&gt;

&lt;p&gt;Note the HTTPS URL provided by ngrok (e.g., &lt;a href="https://your-ngrok-subdomain.ngrok.io" rel="noopener noreferrer"&gt;https://your-ngrok-subdomain.ngrok.io&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;You can read more about &lt;a href="https://developer.vonage.com/getting-started/tools/ngrok" rel="noopener noreferrer"&gt;testing with ngrok&lt;/a&gt; in our developer portal tools.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Create and Configure Your Vonage Application
&lt;/h2&gt;

&lt;p&gt;Now that your Node App is ready, you’ll also need to create and set up your Vonage Application. First, create your app in the &lt;a href="https://dashboard.nexmo.com/applications/new" rel="noopener noreferrer"&gt;Vonage Dashboard&lt;/a&gt;. Give the app a name and turn on the Messages capability. &lt;/p&gt;

&lt;p&gt;&lt;em&gt;Vonage dashboard showing the creation of a new application configured for RCS messaging.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;In your Vonage application settings:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Set the Inbound URL to &lt;a href="https://YOUR_NGROK_URL/inbound_rcs" rel="noopener noreferrer"&gt;https://YOUR_NGROK_URL/inbound_rcs&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Set the Status URL to &lt;a href="https://example.com/rcs_status" rel="noopener noreferrer"&gt;https://example.com/rcs_status&lt;/a&gt;. 
** Message statuses will be covered in a future article.&lt;/li&gt;
&lt;li&gt;Generate a public and private key by clicking the button. Ensure to move your private.key file to the project root directory (rcs-carousel-node).&lt;/li&gt;
&lt;li&gt;Save the changes.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Then link your RCS Agent by clicking the “Link external accounts” tab:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu3artqvfxkvmb5dn1sf3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu3artqvfxkvmb5dn1sf3.png" alt="Dashboard view showing the Vonage-Node-RCS application linked to the Vonage RoR RCS external account, with voice and message capabilities enabled." width="800" height="397"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Dashboard view showing the Vonage-Node-RCS application linked to the Vonage RoR RCS external account, with voice and message capabilities enabled.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Test Your Node Application
&lt;/h2&gt;

&lt;p&gt;Use this curl command to trigger your endpoint (replace placeholders):&lt;/p&gt;

&lt;p&gt;On the recipient's phone, the Rich Card Carousel will appear and they can select an action!&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Notes
&lt;/h2&gt;

&lt;p&gt;You’ve now built an interactive RCS product carousel with Node.js and the Vonage Messages API. This is a great way to showcase products, promote events, or offer dynamic choices in a single message.&lt;/p&gt;

&lt;p&gt;Want to go further?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Respond to taps and selections via postbackData&lt;/li&gt;
&lt;li&gt;Load product cards dynamically from an API&lt;/li&gt;
&lt;li&gt;Add location-based filters or categories&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Come show off what you’re building in the&lt;a href="https://developer.vonage.com/community/slack" rel="noopener noreferrer"&gt;Vonage Community Slack&lt;/a&gt; or tag us on &lt;a href="https://twitter.com/VonageDev" rel="noopener noreferrer"&gt;X (formerly Twitter)&lt;/a&gt;. We’d love to see your carousels in the wild!&lt;/p&gt;

</description>
      <category>rcs</category>
      <category>node</category>
    </item>
    <item>
      <title>🚀RCS, Vibe Coding, Golang Tutorials + Events</title>
      <dc:creator>Daniela Facchinetti</dc:creator>
      <pubDate>Fri, 29 Aug 2025 15:02:06 +0000</pubDate>
      <link>https://forem.com/vonagedev/vonage-developer-newsletter-aug-2025-rcs-vibe-coding-golang-tutorials-events-4n5a</link>
      <guid>https://forem.com/vonagedev/vonage-developer-newsletter-aug-2025-rcs-vibe-coding-golang-tutorials-events-4n5a</guid>
      <description>&lt;p&gt;Hi!&lt;/p&gt;

&lt;p&gt;Ready for some exciting news? We’ve rolled out &lt;strong&gt;powerful new features and enhancements **designed to help you build faster and smarter. And as always, you’ll find the **latest tech tutorials and upcoming events&lt;/strong&gt; to keep you inspired. Read on to explore everything that’s new.&lt;/p&gt;

&lt;p&gt;Daniela (Developer Relations Content Manager @ Vonage)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;RELEASES and ANNOUNCEMENTS&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://developer.vonage.com/en/blog/post-call-text-insights-now-in-ga-featuring-ai-generated-summaries" rel="noopener noreferrer"&gt;Post-Call Text Insights Now in GA — Featuring AI-Generated Summaries&lt;/a&gt;&lt;/strong&gt; &lt;br&gt;
Developers can now access AI-generated summaries of recorded video sessions. Forget digging through transcripts … it’s now about smarter and faster insights for telehealth, education, recruiting, and more.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://developer.vonage.com/en/blog/introducing-message-failover-in-vonage-messages-api" rel="noopener noreferrer"&gt;Introducing Message Failover in Vonage Messages API&lt;/a&gt;&lt;/strong&gt; &lt;br&gt;
This blog post details the failover functionality — including what failover is, how to use it, and some situations where it might be useful.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://developer.vonage.com/en/blog/number-verification-api-to-be-replaced-by-verify-with-silent-authentication" rel="noopener noreferrer"&gt;Number Verification API To Be Replaced by Verify With Silent Authentication&lt;/a&gt;&lt;span&gt;  &lt;/span&gt;&lt;/strong&gt;&lt;br&gt;
Vonage is consolidating its silent authentication solutions to reduce complexity and facilitate easier adoption. This includes Number Verification API &lt;strong&gt;sunsetting on September 30&lt;/strong&gt;. All customers are encouraged to migrate to&lt;a href="https://developer.vonage.com/en/verify/overview" rel="noopener noreferrer"&gt; Vonage Verify API&lt;/a&gt; with the&lt;a href="https://developer.vonage.com/en/verify/concepts/silent-authentication?source=verify" rel="noopener noreferrer"&gt; Silent Authentication&lt;/a&gt; workflow.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TUTORIALS&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.youtube.com/watch?v=zoldX-XLjUg" rel="noopener noreferrer"&gt;Vibe Coding With Cursor and Vonage APIs&lt;/a&gt;&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://developer.vonage.com/en/blog/authors/alexandra-williams" rel="noopener noreferrer"&gt;Alexandra Williams&lt;/a&gt; demonstrates coding with Cursor, using Vonage developer documentation as context, to receive a WhatsApp message without needing to manually write code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://developer.vonage.com/en/blog/send-and-receive-rcs-suggested-replies-with-asp-net-core-and-vonage" rel="noopener noreferrer"&gt;Send and Receive RCS Suggested Replies With ASP.NET Core and Vonage&lt;/a&gt;&lt;/strong&gt; &lt;br&gt;
&lt;a href="https://developer.vonage.com/en/blog/authors/benjamin-aronov" rel="noopener noreferrer"&gt;Benjamin Aronov&lt;/a&gt; shows how to build an ASP.NET Core Web API that sends and receives RCS messages using Vonage .NET SDK. This tutorial covers suggested replies, secure webhooks, and end-to-end testing with ngrok and an RCS-enabled phone.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://developer.vonage.com/en/blog/how-to-send-rcs-text-messages-with-go-and-the-vonage-messages-api" rel="noopener noreferrer"&gt;How To Send RCS Text Messages in GoLang&lt;/a&gt;&lt;/strong&gt; &lt;br&gt;
In this step-by-step tutorial,&lt;a href="https://developer.vonage.com/en/blog/authors/benjamin-aronov" rel="noopener noreferrer"&gt;Benjamin Aronov&lt;/a&gt; builds and tests rich messaging with interactive content in your Go apps.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://developer.vonage.com/en/blog/how-to-create-a-virtual-green-screen-using-the-vonage-video-api" rel="noopener noreferrer"&gt;How To Create a Virtual Green Screen Using Vonage Video API&lt;/a&gt;&lt;/strong&gt; &lt;br&gt;
&lt;a href="https://developer.vonage.com/en/blog/authors/richard-sabbarton" rel="noopener noreferrer"&gt;Richard Sabbarton&lt;/a&gt; uses Vonage Video API to overlay presenters onto shared content, leveraging background replacement and HTML5 canvas to create a virtual green screen.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://developer.vonage.com/en/blog/build-a-storytelling-service-with-rcs-rich-cards-and-gemini" rel="noopener noreferrer"&gt;Build a Storytelling Service With RCS and Gemini&lt;/a&gt;&lt;/strong&gt; &lt;br&gt;
&lt;a href="https://developer.vonage.com/en/blog/authors/amanda-cavallaro" rel="noopener noreferrer"&gt;Amanda Cavallaro&lt;/a&gt; walks you through building a generative AI storytelling service using Vonage Messages API for RCS and Google Gemini AI. This includes sending and receiving RCS Rich Card messages — and integrating Gemini to generate bedtime stories.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;EVENTS&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://apiworld.co/" rel="noopener noreferrer"&gt;API World&lt;/a&gt;&lt;/strong&gt; (Online, Sept. 3 to 5; in-person, Santa Clara, California, Sept. 10 to 12)&lt;br&gt;
&lt;a href="https://www.linkedin.com/in/alexbarnett/" rel="noopener noreferrer"&gt;Alex Barnett&lt;/a&gt; will be a keynote speaker. Be there for his talk: “&lt;a href="https://apiworldcloudxdataweek2025.sched.com/event/24dmQ/keynote-api-vonage-how-network-capabilities-are-powering-the-next-wave-of-digital-transformation?iframe=no" rel="noopener noreferrer"&gt;How network capabilities are powering the next wave of digital transformations&lt;/a&gt;".&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.crowdcast.io/c/z1dvu7nscev0?utm_source=devnewslettert&amp;amp;utm_medium=devnewslettert&amp;amp;utm_campaign=z1dvu7nscev0" rel="noopener noreferrer"&gt;Knowledge Quest, Video Edition Webinar&lt;/a&gt;&lt;/strong&gt; (Online, Sept. 10)&lt;br&gt;
Maybe you only associate Vonage Video API with a standard meeting format. But this API is flexible enough to support other topologies, including remote monitoring. We’ll review how remote monitoring works and guide you on setting up your application effectively.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://developer.vonage.com/en/blog/vonage-codeconnect-webinars-banking-finance-in-focus" rel="noopener noreferrer"&gt;Vonage CodeConnect Webinars&lt;/a&gt;&lt;/strong&gt; (Online, Sept. 24)&lt;br&gt;
Here’s a great chance to learn about Vonage Network and Communications APIs, such as SIM Swap and Device Location, to verify user identities and prevent fraud before it occurs. The session — &lt;a href="https://www.crowdcast.io/c/z1dvu7nscev0?utm_source=devnewslettert&amp;amp;utm_medium=devnewslettert&amp;amp;utm_campaign=z1dvu7nscev0" rel="noopener noreferrer"&gt;Build Fraud-Resistant Mobile Banking With Network and Communications APIs&lt;/a&gt; — includes a live demo, with integration into banking platforms and ecommerce sites.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://api-platform.com/con/2025/tickets/" rel="noopener noreferrer"&gt;API Platform Conference&lt;/a&gt;&lt;/strong&gt; (Lille, Sept. 18 to 19)&lt;br&gt;
&lt;a href="https://developer.vonage.com/en/blog/authors/james-seconde" rel="noopener noreferrer"&gt;Jim Seconde&lt;/a&gt; discusses all things tooling, HAL, and HATEOS. Don’t miss his talk “&lt;a href="https://api-platform.com/con/2025/conferences/#2025-an-api-platform-odyssey" rel="noopener noreferrer"&gt;2025, an API Platform Odyssey&lt;/a&gt;” on Sep 19, 2025 at 15.30. And check out the Vonage booth for PHP swag and our live demos.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.commityourcode.com/" rel="noopener noreferrer"&gt;Commit Your Code&lt;/a&gt;&lt;/strong&gt; (Plano, Texas, Sept. 25 to 26)&lt;br&gt;
Commit Your Code is more than just a web development conference — it’s a celebration of community, collaboration, and giving back. Whether you're into frontend, backend, or full-stack development, you'll find inspiring talks, like “What Online Dating Taught Me about Algorithms” by &lt;a href="https://developer.vonage.com/en/blog/authors/diana-pham" rel="noopener noreferrer"&gt;Diana Pham&lt;/a&gt;. Don’t miss it!&lt;/p&gt;

</description>
      <category>vonagenews</category>
    </item>
    <item>
      <title>Sending SMS Messages with PHP</title>
      <dc:creator>James Seconde</dc:creator>
      <pubDate>Wed, 20 Aug 2025 13:45:00 +0000</pubDate>
      <link>https://forem.com/vonagedev/sending-sms-messages-with-php-4db5</link>
      <guid>https://forem.com/vonagedev/sending-sms-messages-with-php-4db5</guid>
      <description>&lt;p&gt;In this tutorial, we’re going to send SMS messages with as few lines of PHP as possible. Firstly, with a raw script, and secondly, using a minimal web application framework.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;PHP 8.1+&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://getcomposer.org/" rel="noopener noreferrer"&gt;Composer&lt;/a&gt;, for package management&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.vonage.com/sign-up" rel="noopener noreferrer"&gt;A Vonage API Account&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How to Send Text with Raw PHP
&lt;/h2&gt;

&lt;p&gt;We’re going to start by creating a new Composer project and pulling in the Vonage PHP SDK. Using the command line, add the following:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mkdir vonage-sms
cd vonage-sms
composer init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Composer will ask you a series of questions - you can leave these all to the defaults as we’re only doing the bare minimum of effort. The process should create your &lt;code&gt;composer.json&lt;/code&gt; file. So, we can add the Vonage PHP SDK now:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;composer require vonage/client
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now, to create our script.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;touch send-sms.php
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Open the new PHP file and make sure Composer’s autoload is pulled in:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;?php

require_once './vendor/autoload.php';

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To send an SMS, we need three things:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A set of credentials taken from the Vonage Dashboard&lt;/li&gt;
&lt;li&gt;A Client object&lt;/li&gt;
&lt;li&gt;A text to send&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Given this, here are the final lines of code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$credentials = new \Vonage\Client\Credentials\Basic(YOUR_API_KEY, YOUR_API_SECRET);
$client = new Vonage\Client($credentials);
$message = new Vonage\Messages\Channel\SMS\SMSText(
  YOUR_NUMBER,
  'Vonage',
  'Hello from Vonage!'
);

$client-&amp;gt;messages()-&amp;gt;send($message);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Plug in the required details to the constant variable placeholders and hit send:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0a1923pu4m15oehiqvox.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0a1923pu4m15oehiqvox.png" alt="Our SMS has been sent!" width="625" height="434"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Four lines of code is pretty good! The second part is plugging this into a basic web framework so that you can POST a message instead of hard-coding it as we have above.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Send SMS via. Slim Framework
&lt;/h2&gt;

&lt;p&gt;For the second example, we’re going to be using the &lt;a href="https://www.slimframework.com/" rel="noopener noreferrer"&gt;Slim Framework&lt;/a&gt;, so install that with Composer:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;composer require slim/slim:"4".*
composer require slim/psr7
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The second command here installs Slim’s PSR-7 (Request Interface) implementation. We’re going to create a route that takes a POST request with a JSON body containing some text.&lt;/p&gt;

&lt;p&gt;Here is the modified &lt;code&gt;send-sms.php&lt;/code&gt; file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;?php

use Slim\Psr7\Request;
use Slim\Psr7\Response;

require_once '../vendor/autoload.php';

$app = \Slim\Factory\AppFactory::create();

$app-&amp;gt;post('/send', function (Request $request, Response $response) {
   $rawBody = $request-&amp;gt;getBody()-&amp;gt;getContents();
   $requestData = json_decode($rawBody);
   $text = $requestData-&amp;gt;text;

   $credentials = new \Vonage\Client\Credentials\Basic('232130c9', 's09IJad98fa0t9j09ad8fa90s');
   $client = new Vonage\Client($credentials);
   $message = new Vonage\Messages\Channel\SMS\SMSText(
     YOUR_NUMBER,
     'Vonage',
     $text
);

   $client-&amp;gt;messages()-&amp;gt;send($message);

   $response-&amp;gt;getBody()-&amp;gt;write("Vonage sent this text!");
   return $response;
});

$app-&amp;gt;run();
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Instead of running this code, we’re mocking using a web platform instead, so we’re going to use PHP’s built-in webserver to fire up a development environment from the command line:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;php -S localhost:8888 -t send-php.php
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To send the message, you’ll want an HTTP tooling client that makes it easy to send POST requests - I’ve opted for Kong’s &lt;a href="https://insomnia.rest/" rel="noopener noreferrer"&gt;Insomnia&lt;/a&gt; but you could also use &lt;a href="https://www.postman.com/" rel="noopener noreferrer"&gt;Postman&lt;/a&gt; or even a raw cURL request.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fceppuer97ku4fhch21u7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fceppuer97ku4fhch21u7.png" alt="API Tooling is super helpful" width="626" height="105"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Now we have a route where you can send the message text to a server for it to complete the process. You can, of course, add additional keys to the JSON payload to add the from and to cellular numbers. Fancy building something out of it? Check out our &lt;a href="https://github.com/Vonage/vonage-laravel" rel="noopener noreferrer"&gt;Laravel integration&lt;/a&gt; or check out further reading on sending messages with this API in Symfony.&lt;/p&gt;

&lt;p&gt;Have a question or something to share? Join the conversation on the &lt;a href="https://developer.vonage.com/en/community/slack" rel="noopener noreferrer"&gt;Vonage Community Slack&lt;/a&gt;, stay up to date with the &lt;a href="https://ww3.nexmo.com/subscribe-the-vonage-developer-newsletter" rel="noopener noreferrer"&gt;Developer Newsletter&lt;/a&gt;, follow us on &lt;a href="https://x.com/vonagedev" rel="noopener noreferrer"&gt;X (formerly Twitter)&lt;/a&gt;, and subscribe to our &lt;a href="https://www.youtube.com/@VonageDev" rel="noopener noreferrer"&gt;YouTube channel &lt;/a&gt;for video tutorials. Stay connected, share your progress, and keep up with the latest developer news, tips, and events!&lt;/p&gt;

&lt;h2&gt;
  
  
  Additional Resources
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://developer.vonage.com/en/blog/send-sms-from-php-with-failover-dr" rel="noopener noreferrer"&gt;Sending SMS from PHP with Failover: The Cupcake Bakery&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://developer.vonage.com/en/blog/type-safety-done-right-php-array-hacking" rel="noopener noreferrer"&gt;Type Safety Done Right - PHP Array Hacking&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://developer.vonage.com/en/blog/scrub-up-cleaning-your-php-application-with-phpstan" rel="noopener noreferrer"&gt;Scrub Up! Cleaning Your PHP Application With PHPStan&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/Vonage/vonage-php-sdk-core" rel="noopener noreferrer"&gt;Vonage PHP SDK&lt;/a&gt;&lt;/p&gt;

</description>
      <category>php</category>
    </item>
    <item>
      <title>Build a Storytelling Service With RCS Rich Cards and Gemini</title>
      <dc:creator>Amanda Cavallaro</dc:creator>
      <pubDate>Tue, 19 Aug 2025 14:27:06 +0000</pubDate>
      <link>https://forem.com/vonagedev/build-a-storytelling-service-with-rcs-rich-cards-and-gemini-1h6j</link>
      <guid>https://forem.com/vonagedev/build-a-storytelling-service-with-rcs-rich-cards-and-gemini-1h6j</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;This tutorial shows you how to build a generative AI storytelling service using the &lt;a href="https://developer.vonage.com/en/messages/overview" rel="noopener noreferrer"&gt;Vonage Messages API&lt;/a&gt; for RCS and &lt;a href="https://gemini.google.com/" rel="noopener noreferrer"&gt;Google’s Gemini&lt;/a&gt; AI. You'll learn what RCS is, how to send and receive RCS Rich Card messages, and how to integrate Gemini to generate short bedtime stories.&lt;/p&gt;

&lt;p&gt;Inspired by my toddler's bedtime routines, I wanted to create something useful. So I combined RCS messaging with Gemini AI to develop a simple storytelling service.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzj0n7uh80dvxcuwyysvv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzj0n7uh80dvxcuwyysvv.png" alt="RCS Story Demonstration" width="800" height="1777"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can find the complete source code on the&lt;a href="https://github.com/Vonage-Community/blog-messages-nodejs-rcs_bedtime_story_generator/tree/main" rel="noopener noreferrer"&gt; Vonage Community GitHub repository&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://nodejs.org/en/download" rel="noopener noreferrer"&gt;Node.js is installed&lt;/a&gt; on your machine.&lt;/li&gt;
&lt;li&gt;An API tunneling service, such as &lt;a href="https://developer.vonage.com/en/getting-started/tools/ngrok" rel="noopener noreferrer"&gt;ngrok&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;A registered &lt;a href="https://api.support.vonage.com/hc/en-us/articles/15546468078108-Understanding-RCS-and-RBM" rel="noopener noreferrer"&gt;RCS Business Messaging (RBM) agent&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;A &lt;a href="https://api.support.vonage.com/hc/en-us/articles/16711304811932-How-can-I-check-if-RCS-Rich-Communication-Services-is-active-on-my-device" rel="noopener noreferrer"&gt;phone with RCS capabilities&lt;/a&gt;&lt;span&gt;.&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;A &lt;a href="https://dashboard.nexmo.com/sign-up" rel="noopener noreferrer"&gt;Vonage API account.&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Vonage API Account&lt;/li&gt;
&lt;li&gt;To complete this tutorial, you will need a &lt;a href="https://developer.vonage.com/sign-up" rel="noopener noreferrer"&gt;Vonage API account&lt;/a&gt;. If you don’t have one already, you can sign up today and start building with free credit. Once you have an account, you can find your API Key and API Secret at the top of the &lt;a href="https://dashboard.nexmo.com/" rel="noopener noreferrer"&gt;Vonage API Dashboard&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  How to Get RCS Working on Your Phone
&lt;/h3&gt;

&lt;p&gt;To send and receive RCS messages in your Vonage application, you need a registered RBM agent and a phone with RCS capabilities.&lt;/p&gt;

&lt;p&gt;RCS through Vonage is currently only available for managed accounts. You’ll need to &lt;a href="https://www.vonage.com/contact-us/" rel="noopener noreferrer"&gt;contact your account manager&lt;/a&gt; to activate Developer Mode, which allows testing with allowlisted numbers.&lt;/p&gt;

&lt;p&gt;If you don't have a managed account, reach out to the &lt;a href="https://www.vonage.com/contact-us/" rel="noopener noreferrer"&gt;Vonage Sales Team&lt;/a&gt; for support.&lt;/p&gt;

&lt;h2&gt;
  
  
  Terminology
&lt;/h2&gt;

&lt;p&gt;RCS (Rich Communication Services): An industry standard that enhances traditional messaging with rich media, branded content, and read receipts. If a recipient’s device or network doesn’t support RCS, messages automatically fall back to SMS to ensure they are still delivered.&lt;/p&gt;

&lt;p&gt;Learn more in our &lt;a href="https://developer.vonage.com/en/messages/concepts/rcs" rel="noopener noreferrer"&gt;RCS documentation&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;SMS (Short Message Service): Traditional SMS supports only plain text. RCS allows branded buttons, images, and message status updates. &lt;a href="https://developer.vonage.com/en/blog/send-sms-messages-with-node-js-one-dev-minute" rel="noopener noreferrer"&gt;Learn to send SMS messages with Node.js&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;MMS (Multimedia Messaging Service): Unlike MMS, which often has lower media quality and file size limits, RCS supports high-quality media and features such as typing indicators and delivery status updates. Learn &lt;a href="https://developer.vonage.com/en/blog/what-can-i-do-with-mms" rel="noopener noreferrer"&gt;what you can do with MMS&lt;/a&gt; and &lt;a href="https://developer.vonage.com/en/blog/how-to-send-mms-with-node-js-dr" rel="noopener noreferrer"&gt;how to send MMS with Node.js&lt;/a&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;To create an application, go to the &lt;a href="https://dashboard.vonage.com/applications/new" rel="noopener noreferrer"&gt;Create an Application&lt;/a&gt; page on the Vonage Dashboard, and define a Name for your Application. \&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;If needed, click on "generate public and private key". A private key (.key file) will be generated. Download and store it securely. This key is needed for authentication when making API requests. Note: Private keys will not work unless the application is saved.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Choose the capabilities you need (e.g., Voice, Messages, RTC, etc.) and provide the required webhooks (e.g., event URLs, answer URLs, or inbound message URLs). These will be described in the tutorial.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;To save and deploy, click "Generate new application" to finalize the setup. Your application is now ready to use with Vonage APIs.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Messages API Capability
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Start an ngrok Tunneling Instance
&lt;/h4&gt;

&lt;p&gt;If you haven’t used ngrok before, &lt;a href="https://developer.vonage.com/en/getting-started/tools/ngrok" rel="noopener noreferrer"&gt;you can start here&lt;/a&gt;. I’ve added the steps to run an instance below the image in the next section.&lt;/p&gt;

&lt;p&gt;Run the following command to start an ngrok tunneling instance.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ngrok http 3000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In the output, you’ll find a URL that starts with https:// and ends in .ngrok.app/. Make a note of it as you’ll need it for the next step to configure your webhooks.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Forwarding https://94cd51b63460.ngrok.app/ -&amp;gt; http://localhost:8000          
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Configure Webhooks
&lt;/h4&gt;

&lt;p&gt;Back in the Vonage API Dashboard, under your Apps, toggle the Messages option under capabilities and set your server's public URL from ngrok as the endpoint for inbound messages and events. it should look like: &lt;code&gt;https://94cd51b63460.ngrok.app/webhooks/inbound&lt;/code&gt; for inbound and &lt;code&gt;https://94cd51b63460.ngrok.app/webhooks/status&lt;/code&gt; for status. If you’d like to &lt;a href="https://developer.vonage.com/en/getting-started/concepts/webhooks" rel="noopener noreferrer"&gt;learn more about webhooks, you can find information on our Vonage documentation&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fppa3ewlv8qq7eon9pb23.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fppa3ewlv8qq7eon9pb23.png" alt="webhooks" width="800" height="328"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Initial Project Setup for Vonage Messages API
&lt;/h2&gt;

&lt;p&gt;Clone the &lt;a href="https://github.com/Vonage-Community/blog-messages-nodejs-rcs-bedtime-story-generator/blob/main/src/server.js" rel="noopener noreferrer"&gt;Vonage Community GitHub repository&lt;/a&gt; for this project and &lt;code&gt;npm install&lt;/code&gt; the dependencies.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install express debug @vonage/messages @vonage/server-sdk dotenv
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Create the Environment Variables File
&lt;/h2&gt;

&lt;p&gt;Create a .env file in your project root.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;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
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In your project, you'll also find a &lt;a href="https://github.com/Vonage-Community/blog-messages-nodejs-rcs_bedtime_story_generator/blob/main/src/vonage.js" rel="noopener noreferrer"&gt;vonage.js file&lt;/a&gt; that contains the Dotenv and Vonage Client Setup.&lt;/p&gt;

&lt;h2&gt;
  
  
  Add JWT Verification
&lt;/h2&gt;

&lt;p&gt;Add a JWT verification function to verify if the incoming request (e.g., message or call) came from Vonage. &lt;/p&gt;

&lt;p&gt;The VONAGE_API_SIGNATURE_SECRET variable is the secret used to sign the request corresponding to the signature secret associated with the API key included in the JWT claims. You can identify your signature secret on the &lt;a href="https://dashboard.vonage.com/settings" rel="noopener noreferrer"&gt;Dashboard settings&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;You can learn more about &lt;a href="https://developer.vonage.com/getting-started/concepts/webhooks#verifying-the-request" rel="noopener noreferrer"&gt;verifying the request&lt;/a&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const verifyJWT = (req) =&amp;gt; {
  // 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");
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Make sure to install the @vonage/jwt dependency.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install @vonage/jwt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Send an RCS Rich Card Message
&lt;/h2&gt;

&lt;p&gt;In your &lt;a href="https://github.com/Vonage-Community/blog-messages-nodejs-rcs_bedtime_story_generator/blob/main/src/server.js" rel="noopener noreferrer"&gt;server.js file,&lt;/a&gt; you'll find the finalized code with Gemini integration, but I wanted to give you a starting point on how to send a Rich Card Message in RCS with a hardcoded text so you can have a first experience with it and see it running before any more complex setup, with everything we've set up so far.&lt;/p&gt;

&lt;p&gt;Start off by adding the imports and defining your variables.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;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);

}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We'll also use an async wrapper for error handling in routes.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const catchAsync = (fn) =&amp;gt; (req, res, next) =&amp;gt; {

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

};

app.use(Express.json());

app.get(

  "/send-story-request",

  catchAsync(async (req, res) =&amp;gt; {

    await sendBedtimeStoryRequest(recipientNumber);

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

  })

);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Create the &lt;code&gt;/webhooks/status&lt;/code&gt; endpoint.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;app.post(

  "/webhooks/status",

  catchAsync(async (req, res) =&amp;gt; {

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

  })

);


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Create the &lt;code&gt;/webhooks/inbound&lt;/code&gt; endpoint.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;app.post(

  "/webhooks/inbound",

  catchAsync(async (req, res) =&amp;gt; {

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

    if (channel === 'rcs' &amp;amp;&amp;amp; message_type === 'reply' &amp;amp;&amp;amp; 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' &amp;amp;&amp;amp; message_type === 'text') {

      if (req.body.text &amp;amp;&amp;amp; 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 });

  })

);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Add some error handling messages, and the app listens on the defined port (3000).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;app.all("*", (req, res) =&amp;gt; {

  res.status(404).json({

    status: 404,

    title: "Not Found",

  });

});

app.use((err, req, res, next) =&amp;gt; {

  res.status(500).json({

    status: 500,

    title: "Internal Server Error",

    detail: err.message,

  });

});

app.listen(port);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Create the &lt;code&gt;sendBedtimeStoryRequest&lt;/code&gt; that sends a new RCS Custom message that says ‘Bedtime Story Generator’, containing a button to generate a new story.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const sendBedtimeStoryRequest = async (number) =&amp;gt; {

  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(() =&amp;gt; {});

    }

  }

};


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Create the &lt;code&gt;sendRCSGreeting&lt;/code&gt; that sends an RCS message using the Vonage Messages API.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const sendRCSGreeting = async (to, messageText) =&amp;gt; {

  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(() =&amp;gt; {});

    }

  }

};
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To run the app, start the server:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;node server.js
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then visit the following URL in your browser, which triggers the first message to the user’s phone, inviting them to generate a story. The JSON confirmation in your browser, along with the received RCS message on your phone, are signs that the system is working.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://localhost:3000/send-story-request" rel="noopener noreferrer"&gt;http://localhost:3000/send-story-request&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Integrate Google Gemini
&lt;/h2&gt;

&lt;p&gt;Now that we have the RCS messaging and webhook working, let's add Google Gemini to our storytelling service. &lt;/p&gt;

&lt;p&gt;When you navigate to &lt;a href="https://aistudio.google.com/app/prompts/new_chat" rel="noopener noreferrer"&gt;AI Studio&lt;/a&gt;), log in, and create a new chat, you can see ‘&amp;lt;&amp;gt;Get Code' at the top right and select your programming language of choice. Choose the model. I've used “Gemini 1.5 Flash Experimental,” but you can choose the one that makes the most sense for your project. &lt;/p&gt;

&lt;p&gt;To learn more, visit the &lt;a href="https://ai.google.dev/gemini-api/docs" rel="noopener noreferrer"&gt;Gemini Developer API documentation page&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Install the Gemini SDK
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install @google/generative-ai
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Add your Gemini API key to .env.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;GEMINI_API_KEY="YOUR_GEMINI_API_KEY"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Initialize Gemini
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import { GoogleGenerativeAI } from "@google/generative-ai";

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

const geminiModel = genAI.getGenerativeModel({ model: "gemini-1.5-flash" });
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Generate Stories with Gemini
&lt;/h3&gt;

&lt;p&gt;With Gemini initialized, we update our&lt;code&gt;/webhooks/inbound&lt;/code&gt; handler. When the user clicks "Generate Story," instead of replying "Hello world!", we now call &lt;code&gt;geminiModel.generateContent&lt;/code&gt; with a specific prompt for a bedtime story. &lt;/p&gt;

&lt;p&gt;The generated text is then sent back to the user using &lt;code&gt;sendGeneratedStory&lt;/code&gt;. We also added handling for users who might type "Generate Story" manually.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;sendGeneratedStory&lt;/code&gt; function now takes the generated story text and uses RCSText to send it back as a regular RCS text message.&lt;/p&gt;

&lt;h2&gt;
  
  
  Test the Storytelling Service
&lt;/h2&gt;

&lt;p&gt;To run the app, (re)start the server:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;node server.js
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then visit the following URL in your browser: &lt;a href="http://localhost:3000/send-story-request" rel="noopener noreferrer"&gt;http://localhost:3000/send-story-request&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;From your device, you'll receive an RCS message. Tap the "Generate Story" to receive a Gemini-created bedtime story.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhazklktprbzyi0mwxzbk.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhazklktprbzyi0mwxzbk.gif" alt="RCS Project" width="572" height="1209"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Conclusion&lt;/p&gt;

&lt;p&gt;This tutorial showed you how to build a Gemini-powered storytelling service using Vonage’s RCS API. The last time I did anything related to RCS was in 2020. I participated in a workshop where each attendee was sent an RCS-enabled SIM card. It was nice to get back to working with RCS again, and I can't wait to write more blog posts about this.&lt;/p&gt;

&lt;p&gt;Have a question or something to share? Join the conversation on the &lt;a href="https://developer.vonage.com/en/community/slack" rel="noopener noreferrer"&gt;Vonage Community Slack&lt;/a&gt;, stay up to date with the &lt;a href="https://ww3.nexmo.com/subscribe-the-vonage-developer-newsletter" rel="noopener noreferrer"&gt;Developer Newsletter&lt;/a&gt;, follow us on &lt;a href="https://x.com/vonagedev" rel="noopener noreferrer"&gt;X (formerly Twitter)&lt;/a&gt;, and subscribe to our &lt;a href="https://www.youtube.com/@VonageDev" rel="noopener noreferrer"&gt;YouTube channel &lt;/a&gt;for video tutorials. Stay connected, share your progress, and keep up with the latest developer news, tips, and events!&lt;/p&gt;

</description>
      <category>rcs</category>
      <category>gemini</category>
    </item>
    <item>
      <title>Send and Receive RCS Suggested Replies with ASP.NET Core and Vonage</title>
      <dc:creator>Benjamin Aronov</dc:creator>
      <pubDate>Fri, 15 Aug 2025 14:37:43 +0000</pubDate>
      <link>https://forem.com/vonagedev/send-and-receive-rcs-suggested-replies-with-aspnet-core-and-vonage-34fj</link>
      <guid>https://forem.com/vonagedev/send-and-receive-rcs-suggested-replies-with-aspnet-core-and-vonage-34fj</guid>
      <description>&lt;p&gt;&lt;a href="https://developer.vonage.com/en/messages/concepts/rcs" rel="noopener noreferrer"&gt;Rich Communication Services (RCS)&lt;/a&gt; represents the evolution of SMS: bringing branded, interactive, and app-like experiences into your native messaging app. With &lt;a href="https://developer.vonage.com/en/messages/overview" rel="noopener noreferrer"&gt;Vonage’s Messages API&lt;/a&gt;, you can deliver RCS messages with &lt;a href="https://developer.vonage.com/en/messages/guides/rcs/rcs-custom-messages#suggested-replies" rel="noopener noreferrer"&gt;Suggested Replies&lt;/a&gt;: clickable options that improve engagement and streamline response handling.&lt;/p&gt;

&lt;p&gt;In this tutorial, you’ll build an ASP.NET Core Web API from scratch that uses &lt;a href="https://github.com/Vonage/vonage-dotnet-sdk" rel="noopener noreferrer"&gt;Vonage’s .NET SDK&lt;/a&gt; to send and receive RCS suggested reply messages. You’ll also learn how to configure the application, set up secure webhooks, and test the end-to-end flow using ngrok and your RCS-enabled phone.&lt;/p&gt;

&lt;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;TL;DR: View the full working &lt;a href="https://github.com/Vonage-Community/tutorial-messages-asp_dot_net_core-rcs_suggested_replies" rel="noopener noreferrer"&gt;code on GitHub&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;


&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6jiwu5rsdzpp794zr8n7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6jiwu5rsdzpp794zr8n7.png" alt="RCS message sent using the Vonage Messages API, prompting the user to select a preferred appointment time with suggested reply buttons." width="576" height="1280"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;RCS message sent using the Vonage Messages API, prompting the user to select a preferred appointment time with suggested reply buttons.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;p&gt;Before we get started, make sure you have:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dotnet.microsoft.com/en-us/download" rel="noopener noreferrer"&gt;.NET 9.0 SDK&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://visualstudio.microsoft.com/" rel="noopener noreferrer"&gt;Visual Studio 2022+&lt;/a&gt; or VS Code&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://ngrok.com/" rel="noopener noreferrer"&gt;ngrok&lt;/a&gt; for local tunneling&lt;/li&gt;
&lt;li&gt;A Vonage API account and a registered RBM agent. (See below)&lt;/li&gt;
&lt;li&gt;An RCS-capable device for testing&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Vonage API Account
&lt;/h3&gt;

&lt;p&gt;To complete this tutorial, you will need a &lt;a href="https://developer.vonage.com/sign-up" rel="noopener noreferrer"&gt;Vonage API account&lt;/a&gt;. If you don’t have one already, you can sign up today and start building with free credit. Once you have an account, you can find your API Key and API Secret at the top of the &lt;a href="https://dashboard.nexmo.com/" rel="noopener noreferrer"&gt;Vonage API Dashboard&lt;/a&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  Ready to start building?
&lt;/h4&gt;

&lt;p&gt;Experience seamless connectivity, real-time messaging, and crystal-clear voice and video calls—all at your fingertips.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Contact Your Vonage Account Manager
&lt;/h2&gt;

&lt;p&gt;In order to send and receive RCS capabilities in your Vonage application, you will need to have a registered Rich Business Messaging (RBM) agent and a &lt;a href="https://api.support.vonage.com/hc/en-us/articles/16711304811932-How-can-I-check-if-RCS-Rich-Communication-Services-is-active-on-my-device" rel="noopener noreferrer"&gt;phone with RCS capabilities&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Currently, RCS Messaging through Vonage is only available for managed accounts. You will need to contact your account manager to request Developer Mode activation for your RBM agent. Developer Mode allows you to test RCS messaging to allow-listed numbers before completing the Agent Verification process and launching in production.&lt;/p&gt;

&lt;p&gt;Please &lt;a href="https://www.vonage.com/contact-us/" rel="noopener noreferrer"&gt;contact our sales team&lt;/a&gt; if you do not have a managed account. &lt;/p&gt;

&lt;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Understand the &lt;a href="https://api.support.vonage.com/hc/en-us/articles/15546468078108-Understanding-RCS-and-RBM" rel="noopener noreferrer"&gt;difference between RCS and RBM&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;


&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Create the ASP.NET Core Project
&lt;/h2&gt;

&lt;p&gt;We’ll start by generating a minimal ASP.NET Core Web API using the built-in CLI template.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;dotnet new web -n RcsSuggestedReplies
cd RcsSuggestedReplies
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Add Required NuGet Packages
&lt;/h2&gt;

&lt;p&gt;Install the necessary dependencies:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;dotnet add package Vonage
dotnet add package Microsoft.AspNetCore.Mvc.NewtonsoftJson
dotnet add package Microsoft.AspNetCore.OpenApi
dotnet add package Swashbuckle.AspNetCore
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Vonage: To use the Messages API&lt;/li&gt;
&lt;li&gt;Newtonsoft.Json: JSON handling for API requests and responses&lt;/li&gt;
&lt;li&gt;OpenApi: OpenAPI specification support for your endpoints&lt;/li&gt;
&lt;li&gt;Swashbuckle: Swagger UI for testing your API in the browser&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Create a Configuration Class
&lt;/h2&gt;

&lt;p&gt;Create CustomConfiguration.cs in the root of your project and add:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;namespace RcsSuggestedReplies;

public record CustomConfiguration
{
    public string SenderId { get; init; } = string.Empty;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This class uses C#'s record type to define a simple immutable configuration object. It allows you to bind strongly typed settings from appsettings.json, making your code cleaner and less error-prone than using raw strings everywhere.&lt;/p&gt;

&lt;h2&gt;
  
  
  Configure Application Settings
&lt;/h2&gt;

&lt;p&gt;Create or update your appsettings.json file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "AllowedHosts": "*",
  "Vonage": {
    "Application.Id": "YOUR_APPLICATION_ID",
    "Application.Key": "-----BEGIN PRIVATE KEY YOUR_PRIVATE_KEY"
  },
  "CustomConfiguration": {
    "SenderId": "YOUR_SENDER_ID"
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Your appsettings.json stores runtime configuration such as credentials, sender ID, and log levels. Keeping sensitive settings like these in a config file allows for the separation of code and environment-specific values.&lt;/p&gt;

&lt;p&gt;Update these variables once you have completed the &lt;em&gt;“Create and Configure Your Vonage Application”&lt;/em&gt; section below.&lt;/p&gt;

&lt;h2&gt;
  
  
  Create the Send Message Endpoint
&lt;/h2&gt;

&lt;p&gt;Create a file named SendRcsMessageEndpoint.cs in the root of your project. This file defines the API logic for sending RCS messages. The SendRcsRequest record models the incoming JSON body, while the SendRcsMessageEndpoint handles the logic for sending the message via the Vonage Messages API. We separate the logic that builds the message payload into its own method, BuildRcsCustomRequest. This improves readability and makes the function easier to test or extend. For example, you could customize the suggestions dynamically in the future.&lt;/p&gt;

&lt;p&gt;For now, this endpoint handles sending RCS messages with 3 hardcoded suggested replies for appointment scheduling.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;using Microsoft.Extensions.Options;
using Vonage.Messages;
using Vonage.Messages.Rcs;

namespace RcsSuggestedReplies;

public record SendRcsRequest(string To);

public class SendRcsMessageEndpoint(IMessagesClient messagesClient, IOptions&amp;lt;CustomConfiguration&amp;gt; customConfiguration)
{
    public async Task&amp;lt;IResult&amp;gt; SendRcsMessage(SendRcsRequest request)
    {
        try
        {
            var response = await messagesClient.SendAsync(BuildRcsCustomRequest(request));
            Console.WriteLine($"Message sent: {response.MessageUuid}");
            return Results.Ok();
        }
        catch (Exception exception)
        {
            Console.WriteLine($"Error sending message: {exception.Message}");
            return Results.Problem(exception.Message);
        }
    }

    private RcsCustomRequest BuildRcsCustomRequest(SendRcsRequest sendRcsRequest)
    {
        return new RcsCustomRequest
        {
            From = customConfiguration.Value.SenderId,
            To = sendRcsRequest.To,
            Custom = new
            {
                ContentMessage = new
                {
                    Text = "What time works best for your appointment?",
                    Suggestions =
                        new[]
                        {
                            new
                            {
                                Reply = new
                                {
                                    Text = "9am",
                                    PostbackData = "time_9am"
                                }
                            },
                            new
                            {
                                Reply = new
                                {
                                    Text = "11am",
                                    PostbackData = "time_11am"
                                }
                            },
                            new
                            {
                                Reply = new
                                {
                                    Text = "2pm",
                                    PostbackData = "time_2pm"
                                }
                            }
                        }
                }
            }
        };
    }
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Create the Receive Message Endpoint
&lt;/h2&gt;

&lt;p&gt;Create another file called ReceiveRcsInboundEndpoint.cs in the root of your project.This class handles inbound webhook messages from Vonage. It verifies the request's authenticity using JWT validation and sends a confirmation reply when the user selects one of the suggested responses. JWT signature verification ensures you're not processing spoofed or malicious messages, and that incoming requests are indeed coming from Vonage.After parsing the user's reply, we send a friendly confirmation message. Keeping this logic in a separate method keeps the ReceiveRcsInbound function focused and easier to read.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;using Microsoft.Extensions.Options;
using Vonage;
using Vonage.Messages;
using Vonage.Messages.Rcs;
using Vonage.Messages.Webhooks;
using Vonage.Request;

namespace RcsSuggestedReplies;

public class ReceiveRcsInboundEndpoint(IMessagesClient messagesClient, IOptions&amp;lt;CustomConfiguration&amp;gt; customConfiguration, Credentials credentials)
{
    public async Task&amp;lt;IResult&amp;gt; ReceiveRcsInbound(HttpContext httpContext, MessageWebhookResponse messageWebhookResponse)
    {
        var token = httpContext.Request.Headers.Authorization.ToString().Split(' ')[1];
        if (!Jwt.VerifySignature(token, credentials.ApplicationKey))
        {
            return Results.Unauthorized();
        }

        if (messageWebhookResponse is {Channel: "rcs", MessageType: "reply"})
        {
            var userSelection = messageWebhookResponse.Reply?.ToString();
            Console.WriteLine($"User {messageWebhookResponse.From} select: {userSelection}");
            try
            {
                var response =
                    await messagesClient.SendAsync(BuildConfirmationMessage(messageWebhookResponse, userSelection));
                Console.WriteLine($"Confirmation sent: {response.MessageUuid}");
            }
            catch (Exception exception)
            {
                Console.WriteLine($"Error sending confirmation: {exception.Message}");
            }
        }

        return Results.Ok();
    }

    RcsTextRequest BuildConfirmationMessage(MessageWebhookResponse messageWebhookResponse1, string? s) =&amp;gt;
        new()
        {
            To = messageWebhookResponse1.From,
            From = customConfiguration.Value.SenderId,
            Text = $"{s} is a great choice!",
        };
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This endpoint handles incoming RCS messages, verifies their authenticity, and sends confirmation responses.&lt;/p&gt;

&lt;h2&gt;
  
  
  Configure the Program.cs File
&lt;/h2&gt;

&lt;p&gt;Update your Program.cs file to the following.&lt;/p&gt;

&lt;p&gt;Here, we configure dependency injection, which is a core part of ASP.NET Core's design. We register the Vonage client and our custom endpoints so they can be injected where needed, making the code more modular.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;using RcsSuggestedReplies;
using Vonage.Extensions;
using Vonage.Messages.Webhooks;

var builder = WebApplication.CreateBuilder(args);

// Add services to the container
builder.Services.AddControllers();
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

// Register Vonage and application services
builder.Services.AddVonageClientScoped(builder.Configuration);
builder.Services.Configure&amp;lt;CustomConfiguration&amp;gt;(builder.Configuration.GetSection("CustomConfiguration"));
builder.Services.AddScoped&amp;lt;SendRcsMessageEndpoint&amp;gt;();
builder.Services.AddScoped&amp;lt;ReceiveRcsInboundEndpoint&amp;gt;();

var app = builder.Build();

// Configure the HTTP request pipeline
if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}

app.MapControllers();

// Define our API endpoints
app.MapPost("send-rcs",
    async (SendRcsMessageEndpoint endpoint, SendRcsRequest request) =&amp;gt; await endpoint.SendRcsMessage(request));
app.MapPost("inbound-rcs",
    async (ReceiveRcsInboundEndpoint endpoint, HttpContext context, MessageWebhookResponse inbound) =&amp;gt;
        await endpoint.ReceiveRcsInbound(context, inbound));

app.Run();
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  How to Expose Your Server with ngrok
&lt;/h2&gt;

&lt;p&gt;To receive webhooks from Vonage, your local server must be accessible over the internet. Use ngrok to expose your ASP.NET Core server, which will run on port 5000:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ngrok http 5000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Note the HTTPS URL provided by ngrok (e.g., &lt;a href="https://your-ngrok-subdomain.ngrok.io" rel="noopener noreferrer"&gt;https://your-ngrok-subdomain.ngrok.io&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;You can read more about &lt;a href="https://developer.vonage.com/getting-started/tools/ngrok" rel="noopener noreferrer"&gt;testing with ngrok&lt;/a&gt; in our developer portal tools.&lt;/p&gt;

&lt;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Your application might be running on a different port. You can check in launchSettings.json to confirm.&lt;/p&gt;
&lt;/blockquote&gt;


&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Create and Configure Your Vonage Application
&lt;/h2&gt;

&lt;p&gt;Now that your ASP.NET App is ready, you’ll also need to create and set up your Vonage Application. First, create your app in the &lt;a href="https://dashboard.vonage.com/applications/new" rel="noopener noreferrer"&gt;Vonage Dashboard&lt;/a&gt;. Give the app a name and turn on the Messages capability. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;To create an application, go to the &lt;a href="https://dashboard.vonage.com/applications/new" rel="noopener noreferrer"&gt;Create an Application&lt;/a&gt; page on the Vonage Dashboard, and define a Name for your Application. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;If needed, click on "generate public and private key". A private key (.key file) will be generated. Download and store it securely. This key is needed for authentication when making API requests. Note: Private keys will not work unless the application is saved.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Choose the capabilities you need (e.g., Voice, Messages, RTC, etc.) and provide the required webhooks (e.g., event URLs, answer URLs, or inbound message URLs). These will be described in the tutorial.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;To save and deploy, click "Generate new application" to finalize the setup. Your application is now ready to use with Vonage APIs.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In your Vonage application settings:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Set the Inbound URL to &lt;a href="https://YOUR_NGROK_URL/inbound-rcs" rel="noopener noreferrer"&gt;https://YOUR_NGROK_URL/inbound-rcs&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Set the Status URL to &lt;a href="https://example.com/rcs-status" rel="noopener noreferrer"&gt;https://example.com/rcs-status&lt;/a&gt;. \
** Message statuses will be covered in a future article.&lt;/li&gt;
&lt;li&gt;Generate a public and private key by clicking the button. Ensure to move your private.key file to the project root directory (RcsSuggestedReplies).&lt;/li&gt;
&lt;li&gt;Save the changes.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Then link your RCS Agent by clicking the “Link external accounts” tab:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feywu2f0wc9x81cmqrl8m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feywu2f0wc9x81cmqrl8m.png" alt="Dashboard view showing the Vonage-ASP-NET-RCS application linked to the Vonage RoR RCS external account, with voice and message capabilities enabled." width="800" height="397"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Dashboard view showing the Vonage-ASP-NET-RCS application linked to the Vonage RoR RCS external account, with voice and message capabilities enabled.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Update Your Vonage Credentials
&lt;/h2&gt;

&lt;p&gt;Replace the placeholder values in appsettings.json with your actual Vonage credentials:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"Vonage": {
  "Application.Id": "YOUR_ACTUAL_APPLICATION_ID",
  "Application.Key": "YOUR_PRIVATE_KEY"
},
"CustomConfiguration": {
  "SenderId": "YOUR_ACTUAL_SENDER_ID"
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Run Your Application and Test
&lt;/h2&gt;

&lt;p&gt;Start your application:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;dotnet run
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Your RCS messaging application is now running! You can use a tool like Postman or cURL to send a POST request to your /send-rcs endpoint with the recipient's phone number:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;curl -X POST https://**YOUR_NGROK_URL***/send-rcs \
  -H "Content-Type: application/json" \
  -d '{
    "to": "**YOUR_RCS_TEST_NUMBER"
}'

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;On the recipient's RCS-enabled device, the message with suggested replies should appear.&lt;/p&gt;

&lt;p&gt;When the recipient selects a suggested reply, your /inbound-rcs endpoint will handle the response, and a confirmation message will be sent back.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fst9gbyxhho2ur3ewj6xt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fst9gbyxhho2ur3ewj6xt.png" alt="RCS conversation where a user selects a time from suggested replies and receives a confirmation message, powered by the Vonage Messages API." width="576" height="1280"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;RCS conversation where a user selects a time from suggested replies and receives a confirmation message, powered by the Vonage Messages API.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;You’ve now built a working ASP.NET Core application that can send and receive RCS Suggested Replies using the Vonage Messages API. This simple UI improvement, letting users tap a response instead of typing, can dramatically enhance how users interact with your app.&lt;/p&gt;

&lt;p&gt;With webhook verification, structured response handling, and confirmation messages, this template gives you a solid foundation to expand on. You try adding RCS Cards, storing replies in a database, or dynamically generating suggested replies from user history&lt;/p&gt;

&lt;p&gt;If you run into any questions or have ideas for what you'd like to build next, come join the conversation in our &lt;a href="https://developer.vonage.com/community/slack" rel="noopener noreferrer"&gt;Vonage Community Slack&lt;/a&gt; or reach out on&lt;a href="https://twitter.com/VonageDev" rel="noopener noreferrer"&gt;X (formerly Twitter)&lt;/a&gt;. We’d love to see what you build!&lt;/p&gt;

</description>
      <category>aspnet</category>
      <category>rcs</category>
    </item>
  </channel>
</rss>
