
シェア:
Benjamin AronovはVonageの開発者支援者です。彼はRuby on Railsのバックグラウンドを持つ実績のあるコミュニティ・ビルダーです。Benjaminは故郷であるテルアビブのビーチを楽しんでいる。テルアビブを拠点に、世界最高のスタートアップの創設者たちと出会い、学ぶことができる。技術以外では、完璧なパン・オ・ショコラを求めて世界中を旅するのが好き。
Ruby on RailsでRCSサジェストリプライを送信する方法
所要時間:1 分
リッチ・コミュニケーション・サービス(RCS)は、企業が顧客と関わる方法を変革しています。SMSの次の進化として、RCSは画像、Video、ファイル共有、返信提案などの機能で、よりリッチでインタラクティブな体験を、ユーザーのデフォルトのメッセージングアプリ内でネイティブに提供します。クールな RCSの機能.
AndroidとiOSの両方でRCSサポートが世界中で展開されている今、この技術を探求し始める絶好の機会です。このチュートリアルでは、Ruby on Rails アプリケーションで Vonage Messages API を使用して RCS 返信候補を送信する方法を学び、ユーザとのよりダイナミックで魅力的な会話を作成するのに役立ちます。
>> TL;DR先にスキップして GitHubのクイックスタートコード.
A Vonage RCS chatbot asks the user to choose their preferred ice cream flavor using quick reply buttons.
前提条件
トンネリングサービスを初めて利用する場合や、設定の手助けが必要な場合は、次のガイドをご覧ください。 2025年版 Rails で ngrok を使うをご覧ください。
登録されたRBM代理店
テスト用のRCS機能を持つ電話番号
RBMエージェントの登録方法
VonageアプリケーションでRCS機能を送受信するには、登録されたリッチビジネスメッセージング(RBM)エージェントと RCS機能を持つ電話.
現在、Vonage経由のRCSメッセージングはマネージドアカウントでのみご利用いただけます。RBMエージェントのDeveloper Modeの有効化をリクエストするには、アカウントマネージャに連絡する必要があります。デベロッパーモードでは、エージェント検証プロセスを完了し、本番運用を開始する前に、許可リストに登録された番号へのRCSメッセージングをテストすることができます。
お問い合わせ セールス・チームまでご連絡ください。マネージド・アカウントをお持ちでない場合は、営業担当までご連絡ください。
>> RCSとRBMの違いを理解しよう RCSとRBMの違い.
Ruby on Railsアプリケーションの作り方
このチュートリアルでは、あなたがRubyとRailsの基本的な理解を持っていることを前提に、あまり深い説明はせずに必要なコマンドに絞って説明します。
まず、新しいプロジェクトを作成する。
rails new vonage-rails-quickstart次に、プロジェクトに移動し、Vonage SDKにアクセスできるようにGemfileにVonage gemを追加する。また dotenv-railsを追加して、環境変数を安全に使えるようにします。
# Gemfile
gem 'vonage'
gem 'dotenv-rails', groups: [:development, :test]次にbundlerを実行してgemsをインストールする。
bundle install RCS Suggested Replyとは?
まず、RCSで提案された返信がどのように機能するかを見てみましょう。サジェストされた返信は、カスタムRCSメッセージの一部であり、メッセージペイロードに直接返信ボタンのようなインタラクティブな要素を定義できる柔軟なフォーマットです。プレーンテキストを送信する代わりに、タップ可能なオプションでユーザーを促し、会話をより速く、リッチに、ナビゲートしやすくすることができます。
では、RcsMessageモデルについて考えてみましょう。RcsMessageモデルは、その属性とデータベースへの格納方法を定義しています。Messages APIのRCSメッセージは、5つのタイプのいずれかになります: テキスト, イメージ, Video, ファイルまたは カスタム.推奨される返信は カスタムタイプで、次のような基本構造を持っています:
{
"message_type": "custom",
"custom": {},
"to": "447700900000",
"from": "Vonage",
"channel": "rcs",
"ttl": 600,
"client_ref": "abc123",
"webhook_url": "https://example.com/status"
}
しかし、カスタム・オブジェクトのスキーマは多岐にわたるため、ここが厄介なところだ。 カスタム・オブジェクトのスキーマは大きく変わる可能性があるからだ。 RCSカスタム・メッセージについてもっと読む.
私たちのユースケースでは、APIは送信提案メッセージがこのような構造を持つことを期待します:
{
"to": "447900000000",
"from": "Vonage",
"channel": "rcs",
"message_type": "custom",
"custom": {
"contentMessage": {
"text": "Which ice-cream flavour do you prefer?",
"suggestions": [
{
"reply": {
"text": "Vanilla",
"postbackData": "suggestion_1"
}
},
{
"reply": {
"text": "Chocolate",
"postbackData": "suggestion_2"
}
}
]
}
}
}そして、ユーザーが返信提案ボタンをクリックすると、レスポンスは次のようになる:
{
"to": "Vonage",
"from": "447900000000",
"channel": "rcs",
"message_uuid": "aaaaaaaa-bbbb-cccc-dddd-0123456789ab",
"timestamp": "2024-02-08T10:12:44Z",
"message_type": "reply",
"reply": {
"id": "suggestion_2",
"title": "Chocolate"
}
} RCS返信モデルの作成方法
この両方の状況に対応できる柔軟でダイナミックなRCSメッセージモデルを作るには、どうすればいいのだろうか?ありがたいことに、ActiveRecordでは、データ型として データ型としてJSONを直接使うことができる。
7つのフィールドが必要だ:
toRCSの受信者。
からRCSの送信者。
ステータス: RCSが正常に配信されたかどうか。
メッセージIDこれはメッセージのステータスを追跡するのに重要です。
タイムスタンプ: ユーザーが提案に返信した時。
カスタム:JSONオブジェクトはMessages APIに返信提案メッセージであることを伝え、提案されたメッセージと提案内容を含みます。
返信:これはMessages APIに、提案されたメッセージに対する返信であることを伝えるJSONオブジェクトです。
rails generate model RcsMessage to:string from:string message_uuid:string timestamp:string message_type:string status:string custom:json reply:json新しいモデルでデータベースを更新する必要もある。
rails db:migrate アウトバウンドRCSコントローラーの作成方法
ロジックを処理するコントローラを作成しましょう。
rails g controller OutboundRcs new create最後に、送信SMSのルートを定義しましょう。
# config/routes.rb
Rails.application.routes.draw do
# For OutboundRcs controller, new & create
get '/outbound_rcs/new', to: 'outbound_rcs#new', as: :new_outbound_rcs
post '/outbound_rcs', to: 'outbound_rcs#create', as: :outbound_rcs
... previous routes ...
end Vonageアプリケーションの作成方法
Railsアプリの準備ができたので、Vonageアプリケーションを作成してセットアップする必要があります。まず、アプリを Vonage ダッシュボード.アプリに名前を付け、メッセージ機能をオンにします。今のところ、ウェブフックのプレースホルダURLを追加することができます。さらに今後のブログ記事で、アプリケーションをRCSエージェントにリンクする必要があります。この記事ではアウトバウンドメッセージのみを扱い、Webhookを使う必要はないので、今は省略することができる。
A screenshot of the Vonage Developer dashboard showing the creation of a new application with authentication, privacy, and messaging capabilities settings.必ず「Generate public and private key(公開鍵と秘密鍵を生成する)」をクリックして秘密鍵を生成してください。これでprivate.keyファイルがコンピュータにダウンロードされます。private.keyファイルをRailsアプリケーションのルートに移動します。
アプリケーションが作成されたら、アプリケーションIDを控えておいてください。
を作成する ファイルを作成します。ファイルを作成します:
touch .env最後に、以下のキーを認証情報とともに追加する。
# .env
VONAGE_APPLICATION_ID=''
VONAGE_PRIVATE_KEY='./private.key'
RCS_SENDER_ID=''注意 RCS_SENDER_IDはRCSブランド名です。フォーマット要件を必ず確認してください。たとえば、スペースは使用できません。たとえば、RCSブランド名が "Ruby on Rails Quickstart "の場合、SENDER_IDは "RubyonRailsQuickstart "になります。
Vonage Rubyクライアントの初期化方法
完全なRailsアプリケーションでRubyクライアントを有効にする前に、Rubyコードでより一般的にRubyクライアントを使う方法を見てみましょう。クライアントを使うには、環境ファイルに格納されているアプリケーション情報でインスタンスを初期化するだけです。
vonage = Vonage::Client.new(
application_id: ENV["VONAGE_APPLICATION_ID"],
private_key: ENV["VONAGE_PRIVATE_KEY"]
)
APIクレデンシャルを安全に管理する方法について詳しく知りたいですか?以下をご覧ください。 Rubyで環境変数を使う.
RubyでRCSメッセージを送信する方法
これでクライアントは初期化され、RCSメッセージの送信は非常にシンプルな2ステップのプロセスになった。ここでは メッセージングメソッドを呼び出してクライアントにMessages APIを使うように指示し、RCSメッセージを作成する:
message = vonage.messaging.rcs(
type: 'custom',
message: {
contentMessage: {
text: "Vonage APIs are easy to use.",
suggestions: [
{
reply: {
text: "Strongly Agree",
postbackData: "5"
}
},
{
reply: {
text: "Agree",
postbackData: "4"
}
},
{
reply: {
text: "Neutral",
postbackData: "3"
}
},
{
reply: {
text: "Disagree",
postbackData: "2"
}
},
{
reply: {
text: "Strongly Disagree",
postbackData: "1"
}
}
]
}
}
)次に、sendメソッドにメッセージを渡します。ここで からフィールドが RBM SenderID (ブランド名) であることに注目してください。SenderIDには、スペースを入れないなど、特別なフォーマットが必要です。不明な場合は、アカウントマネージャーに確認してください。
vonage.messaging.send(
from: 'VonageRCSAgent',
to: '447900000000',
**message
) Ruby on RailsアプリケーションでRCSを送信する
VonageのRubyクライアントを使ってRCSを送信する方法を説明したので、シンプルなフォームとコントローラを使ってRuby on RailsのRCS送信機能をアプリに統合してみましょう。フォームとコントローラを使って、アプリにRCS送信機能を組み込んでみましょう。 を, contentMessage textと 返信提案フィールドを追加しました。RCSは最大11の返信提案を扱うことができます。そのため、「別の提案を追加」ボタンを追加し、必要な数だけ作成できるようにしました!
このフォームをコピーして /app/views/outbound_rcs/new.html.erbに追加します。ビューと 関連するCSS.フォームにはプレースホルダーがあるので、どのような入力が期待されているかわかります。
User interface for sending an RCS message, showing fields to enter the recipient's phone number, content message, and suggested reply options.では、フォームを動作させるためのロジックを実装してみよう。まず、フォームを読み込むために空のRCSインスタンスを作成する必要がある。そして、フォームが送信されたら、createメソッドをトリガーする。
必要なパラメータ (に, からと カスタム)を使ってフォームから新しい 新しいインスタンスを作成します。残念ながら、もう少し複雑です。しかし、そこで何が起こっているのか?
# app/controllers/outbound_rcs_controller.rb
class OutboundRcsController < ApplicationController
def new
@rcs_message = RcsMessage.new
end
def create
@rcs_message = RcsMessage.new(
to: safe_params[:to],
from: ENV["RCS_SENDER_ID"],
message_type: 'custom'
)
custom_message = construct_custom_message(params[:rcs_message])
@rcs_message.custom = custom_message
if @rcs_message.save
deliver @rcs_message
redirect_to :new_outbound_rcs, flash: { notice: 'RCS Sent' }
else
flash[:alert] = 'Something went wrong'
render :new, status: :unprocessable_entity
end
end
private
def safe_params
params.require(:rcs_message).permit(:to)
end
end
ちょっと乱雑に見えるのは、そのせいだ:
1) 私たちのRCSモデルは、柔軟なJSONデータ型を使用しています。 カスタムフィールドに柔軟な JSON データ型を使用しています。しかし、それはまた、いくつの提案が渡されるかわからないことを意味します。
2) APIが期待するJSONオブジェクトを構築する必要がある。私たちのフォームは各提案のテキストを提供しますが、それでもまだ 提案を配列に構築する必要があります。 テキストと postbackData.
この問題を解決するには、コントローラのプライベートメソッドを定義します、 コンストラスト_カスタム_メッセージメソッドを定義して カスタムフィールドを作成し、それを新しく作成した インスタンスに追加します。インスタンスに追加します。
def construct_custom_message(rcs_message_params)
content_message = rcs_message_params[:contentMessage]
suggestions = rcs_message_params[:suggestions]
{
contentMessage: {
text: contentMessage,
suggestions: Array(suggestions).reject(&:blank?).each_with_index.map do |suggestion, idx|
{
reply: {
text: suggestion,
postbackData: "value#{idx + 1}"
}
}
end
}
}
endこれで メッセージにはすべての必須フィールドがあるので、それをデータベースに保存して、Messages APIに配送を依頼します。
その 配信メソッドは、前のセクションで使ったものとほぼ同じですが、メッセージ メッセージオブジェクトを使用し、APIレスポンスを処理することを除けば、前のセクションで使用したものとほぼ同じです。
メッセージの送信が成功した場合、202のステータスコードとともに メッセージID.このUUIDは メッセージステータスを使った配送状況の追跡に役立ちます。
def deliver(rcs_message)
message = vonage.messaging.rcs(
type: rcs_message.message_type,
message: rcs_message.custom
)
response = vonage.messaging.send(
from: ENV["RCS_SENDER_ID"],
to: rcs_message.to,
**message
)
puts response
if response.http_response.code == '202'
rcs_message.update(
message_uuid: response.entity.attributes[:message_uuid]
)
end
end完全な アウトバウンド_rcs_controller.rbファイルを参照してください。
ここでRailsサーバーを起動する:
rails sそして開く http://localhost:3000/outbound_rcs/newブラウザで.Ruby on RailsアプリからRCSを送信できるようになる!
Ruby SDKとMessages APIの比較
お気づきかもしれないが デリバリーメソッドで タイプではなく メッセージタイプの代わりに Messages APIリファレンスで定義されている.これは、Ruby SDKがMessages APIを抽象化し、単純に 型と メッセージ.さらに、追加のオプションを optsパラメータを通して渡すことができます。もっと見る 例を参照してください。
必要であれば、抽象化をスキップして、Messages APIを直接呼び出すこともできます。 sendメソッドを通して直接呼び出すこともできる:
client.messaging.send(
channel: 'rcs',
message_type: 'text',
to: '447700900000',
from: 'Vonage',
text: 'Hello world!'
)
結論
よくやった!Vonage Messages API を使って Ruby on Rails アプリケーションからインタラクティブな返信候補を送信し、RCS で最先端のメッセージング体験を構築する第一歩を踏み出しました。
アプリをインタラクティブにする準備はできていますか?ユーザーの入力を Ruby on RailsでRCSの返信候補を受け取る.また、Ruby on RailsでRCSメッセージのステータス更新を受信することで、メッセージ配信をリアルタイムで追跡することもできます。 Ruby on RailsでRCSメッセージのステータス更新を受信する.
RubyやRCSのコンテンツについてご質問やご提案がございましたら、Vonageの コミュニティ Slackまたは X(旧 Twitter.次に何を作るか、ぜひお聞かせください!