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

GoとVonage Messages APIを使ってRCSテキストメッセージを送信する方法

最終更新日 August 26, 2025

所要時間:1 分

RCS(リッチ・コミュニケーション・サービス)は、インタラクティブなメッセージング、画像、リッチメディア、リードレシートなどを使って SMS を次のレベルに引き上げます。このチュートリアルでは、GoとVonage Messages APIを使用して基本的なRCSテキストメッセージを送信する方法を説明し、より高度な機能のための基礎を設定します。 より高度な機能.

>> TL;DR:完全な GitHub.

しかし Vonage Go SDKは現在アーカイブされていますが net/http経由で直接 API リクエストを使用することができます。

前提条件

以下を確認してください:

  • 行く1.18+インストール済み

  • Vonage APIアカウント

  • 登録されたRCSビジネスメッセージング(RBM)エージェント

  • テスト用にRCSを有効にした携帯電話

  • ngrok(ローカルウェブフックテスト用-この例ではオプション)

Vonageアカウントマネージャーへの連絡方法

VonageアプリケーションでRCS機能を送受信するには、登録されたリッチビジネスメッセージング(RBM)エージェントと RCS機能を持つ電話.

現在、Vonage経由のRCSメッセージングはマネージドアカウントでのみご利用いただけます。RBMエージェントのDeveloper Modeの有効化をリクエストするには、アカウントマネージャに連絡する必要があります。デベロッパーモードでは、エージェント検証プロセスを完了し、本番運用を開始する前に、許可リストに登録された番号へのRCSメッセージングをテストすることができます。

お問い合わせ セールス・チームまでご連絡ください。マネージド・アカウントをお持ちでない場合は、営業担当までご連絡ください。

囲碁プロジェクトの設定方法

まずはプロジェクトのセットアップから始めよう。

プロジェクトの初期化

新しいディレクトリを作成し、Goモジュールを初期化する:

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

プロジェクトの依存関係をインストールする

必要なGoパッケージをインストールする:

go get github.com/joho/godotenv github.com/golang-jwt/jwt/v4
  • godotenv:.envファイルから環境変数を読み込む

  • golang-jwt:API認証のためのJWTトークン生成を処理する。

プロジェクトファイルの作成

メイン・アプリケーション・ファイルと環境設定ファイルを作成する:

touch main.go .env

環境変数の設定方法

.envファイルに、Vonageの認証情報と設定を追加します:

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

  • RCS_SENDER_ID:あなたのRBM SenderID (ブランド名)。SenderIDには、スペースを入れないなどの特別なフォーマットが必要です。不明な場合は、アカウント マネージャーに確認してください。

  • TO_NUMBER:受信者の電話番号(+記号なしの国際形式)(例:447700900000

  • VONAGE_PRIVATE_KEY_PATH:秘密鍵ファイルへのパス

  • VONAGE_APPLICATION_ID:あなたのVonageアプリケーションID

VonageアプリケーションIDとprivate.keyファイルは、下記の「Vonageアプリケーションの作成と設定方法」で入手します。

RCSテキストメッセージの送信方法

では main.goで、Vonage Messages API を使って RCS テキスト・メッセージを送信する機能を実装してみよう。

RCSメッセージ構造の定義

まず、RCSメッセージの構造を定義しよう:

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

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

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

この構造では、必要最小限のフィールドを使用する。SMSフェイルオーバーを含むRCSメッセージの全機能については メッセージ送信APIリファレンス.

メイン機能の実装

では、RCSメッセージを送信するメイン関数を実装してみよう。メイン関数は3つの重要な部分に分けることができる:

  • 設定と構成:この関数は、.envファイルから環境変数をロードし、送信者IDや受信者番号のような重要な設定を取得し、テキストコンテンツでRCSメッセージ構造を作成します。

  • 認証とリクエストの準備:アプリケーションIDと秘密鍵を使ってJWTトークンを生成し、メッセージのペイロードと適切な認証ヘッダーを使ってHTTPリクエストを作成する。

  • リクエストの実行とレスポンスの処理:この関数は HTTP リクエストを Vonage Messages API に送信し、レスポンスを処理し、ステータスコードとレスポンスボディの両方を表示してメッセージの正常な配信を確認します。

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

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

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

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

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

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

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

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

JWT認証の実装

メイン関数は generateJWT関数に依存している。JWTトークンを生成する関数を実装してみよう:

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

>>完全な main.goファイルを参照してください。

Vonageアプリケーションの作成と設定方法

Goアプリの準備ができましたので、Vonageアプリケーションを作成し、設定する必要があります:

Vonage Dashboardでアプリを作成します。アプリに名前を付け、メッセージ機能をオンにします。

  • アプリケーションを作成するには アプリケーションの作成ページでアプリケーションの名前を定義します。

  • Webhooksを使用するAPIを使用する場合は、秘密鍵が必要です。Generate public and private key "をクリックすると、自動的にダウンロードが始まります。この鍵は紛失すると再ダウンロードできません。この鍵は紛失しても再ダウンロードできません。 private_<あなたのアプリID>.key.この鍵はAPIコールの認証に使用できます。 注意:アプリケーションを保存するまで、キーは機能しません。

  • 必要な機能(Voice、Messages、RTCなど)を選択し、必要なWebhook(イベントURL、応答URL、受信メッセージURLなど)を提供します。これらはチュートリアルで説明します。

  • 保存してデプロイするには、"Generate new application "をクリックして設定を確定します。これでアプリケーションはVonage APIで使用する準備が整いました。

Vonageアプリケーションの設定で

  • Inbound URLをWebhookエンドポイントに設定する(テスト用にngrokを使用できます)

  • メッセージのステータス更新を受信するためのステータスURLを設定する

  • ボタンをクリックして、公開鍵と秘密鍵を生成します。

    • private.keyファイルをプロジェクトのルート・ディレクトリ( rcs-text-golang )

  • 変更を保存する

次に、"外部アカウントをリンクする "タブをクリックして、RCSエージェントをリンクします:

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

Go RCSアプリケーションのテスト方法

Goアプリケーションを実行します:

go run main.go

すべてが正しく設定されていれば、成功した応答が表示されるはずです:

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

受信者のRCS対応デバイスでは、メッセージはブランド名とメッセージとともにネイティブメッセージングアプリに表示されるはずです。

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

最終的な感想

よくやった!GoとVonage Messages APIを使ってRCSテキストメッセージの送信に成功しました。しかし、RCSにはもっと多くの機能があります!返信の提案、高解像度の画像、Video、または RCS 固有のリッチカードの送信を試してみてください。

Messages APIはメッセージ・ステータスも提供しており、RCSメッセージで何が起きているかを理解するのに役立つ。今後のブログポストでは、webhookを使ってメッセージのステータスを追跡する方法を紹介する。

GoやRCSのコンテンツについてご質問やご提案がありましたら、以下のSlackで会話にご参加ください。 VonageコミュニティSlackまたは X(旧 Twitter.次に何を作るか、ぜひお聞かせください!

シェア:

https://a.storyblok.com/f/270183/384x384/e4e7d1452e/benjamin-aronov.png
Benjamin Aronovデベロッパー・アドボケイト

Benjamin AronovはVonageの開発者支援者です。彼はRuby on Railsのバックグラウンドを持つ実績のあるコミュニティ・ビルダーです。Benjaminは故郷であるテルアビブのビーチを楽しんでいる。テルアビブを拠点に、世界最高のスタートアップの創設者たちと出会い、学ぶことができる。技術以外では、完璧なパン・オ・ショコラを求めて世界中を旅するのが好き。