https://a.storyblok.com/f/270183/1368x665/8e85bcc38c/25may_dev-blog_ruby-sms-suggestions.jpg

Ruby on RailsでRCSサジェストリプライを送信する方法

最終更新日 May 22, 2025

所要時間:1 分

リッチ・コミュニケーション・サービス(RCS)は、企業が顧客と関わる方法を変革しています。SMSの次の進化として、RCSは画像、Video、ファイル共有、返信提案などの機能で、よりリッチでインタラクティブな体験を、ユーザーのデフォルトのメッセージングアプリ内でネイティブに提供します。クールな RCSの機能.

AndroidとiOSの両方でRCSサポートが世界中で展開されている今、この技術を探求し始める絶好の機会です。このチュートリアルでは、Ruby on Rails アプリケーションで Vonage Messages API を使用して RCS 返信候補を送信する方法を学び、ユーザとのよりダイナミックで魅力的な会話を作成するのに役立ちます。

>> TL;DR先にスキップして GitHubのクイックスタートコード.

Screenshot of an RCS message from a Vonage chatbot asking "Which ice cream flavor do you prefer?" with quick reply options: Chocolate, Banana Split, and Vanilla.A Vonage RCS chatbot asks the user to choose their preferred ice cream flavor using quick reply buttons.

前提条件

Vonage API Account

To complete this tutorial, you will need a Vonage API account. 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 Vonage API Dashboard.

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 user interface for creating a new application in the Vonage Developer dashboard. Fields include the application name, API key, authentication options, privacy settings, and messaging capabilities with inbound and status URLs. A toggle for AI data usage is set to off, and the "Generate new application" button is visible.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.フォームにはプレースホルダーがあるので、どのような入力が期待されているかわかります。

Web form titled 'Send an RCS Message' with input fields for the recipient's phone number, a content message asking about ice cream preferences, and a suggestion labeled 'Chocolate', along with buttons to add another suggestion and send the message.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.次に何を作るか、ぜひお聞かせください!

シェア:

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

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