
シェア:
Benjamin AronovはVonageの開発者支援者です。彼はRuby on Railsのバックグラウンドを持つ実績のあるコミュニティ・ビルダーです。Benjaminは故郷であるテルアビブのビーチを楽しんでいる。テルアビブを拠点に、世界最高のスタートアップの創設者たちと出会い、学ぶことができる。技術以外では、完璧なパン・オ・ショコラを求めて世界中を旅するのが好き。
GoとVonage Messages APIを使ってRCSテキストメッセージを送信する方法
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:受信者の電話番号(+記号なしの国際形式)(例:447700900000VONAGE_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エージェントをリンクします:
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対応デバイスでは、メッセージはブランド名とメッセージとともにネイティブメッセージングアプリに表示されるはずです。
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.次に何を作るか、ぜひお聞かせください!