Twilio を介した SMS サービスと音声サービス

Twilio を使用すると、音声、VoIP、メッセージをアプリケーションに組み込むことができます。Twilio プラットフォームは、Twilio マークアップ言語(TwiML)RESTful API、VoIP SDK(ウェブブラウザ、Android、iOS 用)で構成されます。ヘルパー ライブラリは複数の言語で利用できます

TwiML は、通話の着信や SMS を受信したときに何をすべきかを Twilio に通知します。他者から自分のいずれかの Twilio 番号に着信があったり SMS が送信されてきたりすると、Twilio はその電話番号に関連付けられている URL を検索し、リクエストを行い、検出された URL の TwiML 指示を読み取って、通話の記録や SMS の送信など、行うべき処理を決定します。

Twilio REST API を使用して、自分のアカウント、電話番号、通話、テキスト メッセージ、レコーディングに関するメタデータをクエリできます。通話の発信やテキスト メッセージの送信もできます。

料金

詳しくは、Twilio 料金をご覧ください。

始める前に

    GCP プロジェクトを選択または作成します。

    [リソースの管理] ページに移動

設定

以下の手順で、Twilio を使用して通話着信の受信、SMS の送信、または SMS の受信を行います。

  1. Twilio アカウントを作成します
  2. Twilio で番号を作成します。自分の Twilio 番号のアプリ用 URL を必要に応じて設定します。たとえば、サンプルコード用であれば、以下のようになります。
    • 音声リクエスト URL の構成: https://[your-app-id].appspot.com/call/receive
    • SMS リクエスト URL の構成: https://[your-app-id].appspot.com/sms/receive
  3. appengine-web.xml の環境変数セクションに Twilio 設定を構成します。次に例を示します。
    Java 7
    <appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
      <application>YOUR-PROJECT-ID</application>
      <version>YOUR-VERSION-ID</version>
      <threadsafe>true</threadsafe>
      <env-variables>
        <env-var name="TWILIO_ACCOUNT_SID" value="YOUR-TWILIO-ACCOUNT-SID" />
        <env-var name="TWILIO_AUTH_TOKEN" value="YOUR-TWILIO-AUTH-TOKEN" />
        <env-var name="TWILIO_NUMBER" value="YOUR-TWILIO-NUMBER" />
      </env-variables>
    </appengine-web-app>
    Java 8
    <appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
      <runtime>java8</runtime>
      <threadsafe>true</threadsafe>
      <env-variables>
        <env-var name="TWILIO_ACCOUNT_SID" value="YOUR-TWILIO-ACCOUNT-SID" />
        <env-var name="TWILIO_AUTH_TOKEN" value="YOUR-TWILIO-AUTH-TOKEN" />
        <env-var name="TWILIO_NUMBER" value="YOUR-TWILIO-NUMBER" />
      </env-variables>
    </appengine-web-app>
  4. Twilio の Java ライブラリをアプリケーションに追加します。たとえば、Maven を使用する場合は、プロジェクトの pom.xml にライブラリを追加できます。
    <dependency>
      <groupId>com.twilio.sdk</groupId>
      <artifactId>twilio-java-sdk</artifactId>
      <version>6.3.0</version>
    </dependency>
    pom.xml に宣言されているすべての依存関係は、アプリケーションをデプロイするときにインストールされます。
  5. アプリのローカルテストの準備をするため、コマンドラインでローカルマシンの環境変数を設定します。たとえば、サンプルコード用であれば、以下のようになります。
    export TWILIO_ACCOUNT_SID=[your-twilio-account-sid]
    export TWILIO_AUTH_TOKEN=[your-twilio-auth-token]
    export TWILIO_NUMBER=[your-twilio-number]
    
  6. アプリケーションをローカルで実行して、コールバックと SMS 送信をテストできます。Maven を使用した例を次に示します。
    mvn clean jetty:run

サンプルコードのコピー

Twilio との統合の完全なコードサンプルは、GitHub から入手できます。このサンプルコードを使用する場合は、ローカルマシンにコピーしてください。

Java 7
git clone https://github.com/GoogleCloudPlatform/java-docs-samples
cd java-docs-samples/appengine/twilio
Java 8
git clone https://github.com/GoogleCloudPlatform/java-docs-samples
cd java-docs-samples/appengine-java8/twilio

通話着信の受信

Twilio を使用するアプリケーションを初めて作成するには、以下の手順で行います。

  1. 通話着信に応答して TwiML 指示を返すようにアプリケーションを設定します。この例では、TwiML は Say 動詞を使用して指定したテキストを音声に変換するよう Twilio に指示します。
    @SuppressWarnings("serial")
    public class ReceiveCallServlet extends HttpServlet {
    
      @Override
      public void service(HttpServletRequest req, HttpServletResponse resp) throws IOException,
          ServletException {
        TwiMLResponse twiml = new TwiMLResponse();
        Say say = new Say("Hello from Twilio!");
        try {
          twiml.append(say);
        } catch (TwiMLException e) {
          throw new ServletException("Twilio error", e);
        }
    
        resp.setContentType("application/xml");
        resp.getWriter().print(twiml.toXML());
      }
    }
  2. プロジェクトを App Engine にデプロイします
  3. HTTP POST リクエストを http://your-app-id.appspot.com/call/receive に送信します。以下のテキストが返されます。 ... Hello from Twilio!
  4. http://your-app-id.appspot.com/call/receive の URL をコピーして、Twilio アカウントの [Numbers] ページの [Voice URL] ボックスに貼り付けます。
  5. 自分の Twilio 番号を入力して発信します。応答で「Hello from Twilio!」という音声が聞こえます。発信すると、Twilio はあなたの URL をフェッチして、上記の XML 指示を実行します。その後、それ以上の指示がないため、Twilio の通話が切れます。

SMS の送信

Twilio を使用して SMS を送信するには、Twilio Java ヘルパー ライブラリと、この JAR ファイルに組み込まれている Java クラスを使用できます。

  1. SMS を送信するようにアプリケーションを設定します。たとえば、SendSmsServlet.java は SMS グリーティングを送信します。
    @SuppressWarnings("serial")
    public class SendSmsServlet extends HttpServlet {
    
      @Override
      public void service(HttpServletRequest req, HttpServletResponse resp) throws IOException,
          ServletException {
        final String twilioAccountSid = System.getenv("TWILIO_ACCOUNT_SID");
        final String twilioAuthToken = System.getenv("TWILIO_AUTH_TOKEN");
        final String twilioNumber = System.getenv("TWILIO_NUMBER");
        final String toNumber = (String) req.getParameter("to");
        if (toNumber == null) {
          resp.getWriter()
              .print("Please provide the number to message in the \"to\" query string parameter.");
          return;
        }
        TwilioRestClient client = new TwilioRestClient(twilioAccountSid, twilioAuthToken);
        Account account = client.getAccount();
        MessageFactory messageFactory = account.getMessageFactory();
        List<NameValuePair> params = new ArrayList<NameValuePair>();
        params.add(new BasicNameValuePair("To", toNumber));
        params.add(new BasicNameValuePair("From", twilioNumber));
        params.add(new BasicNameValuePair("Body", "Hello from Twilio!"));
        try {
          Message sms = messageFactory.create(params);
          resp.getWriter().print(sms.getBody());
        } catch (TwilioRestException e) {
          throw new ServletException("Twilio error", e);
        }
      }
    }
  2. 実際の電話番号を使用するように to パラメータを変更します。to の番号は携帯電話番号などの任意の発信番号にすることができます。
  3. 更新したコードをデプロイし、アプリ用の次のリクエストパスを読み込んで SMS メッセージをトリガーします。
    http://.appspot.com/send_sms
    

SMS の受信

Twilio を使用して着信 SMS を受信するには、Twilio Java ヘルパー ライブラリを使用します。

  1. 着信 SMS に応答して TwiML 指示を返すように、アプリケーションを設定します。例:
    @SuppressWarnings("serial")
    public class ReceiveSmsServlet extends HttpServlet {
    
      @Override
      public void service(HttpServletRequest request, HttpServletResponse response) throws IOException,
          ServletException {
        String fromNumber = request.getParameter("From");
        String body = request.getParameter("Body");
        String message = String.format("Hello, %s, you said %s", fromNumber, body);
    
        TwiMLResponse twiml = new TwiMLResponse();
        Message sms = new Message(message);
        try {
          twiml.append(sms);
        } catch (TwiMLException e) {
          throw new ServletException("Twilio error", e);
        }
    
        response.setContentType("application/xml");
        response.getWriter().print(twiml.toXML());
      }
    }
  2. 更新したコードを App Engine にデプロイします。
  3. SMS を自分の Twilio 番号に送信してください。返信でグリーティングを受け取るはずです。

次のステップ

いくつかの基本事項を学習しました。セキュアでスケーラブルなアプリケーションを構築するためのその他の大切な点やおすすめの方法をさらに学習してください。

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

Java の App Engine スタンダード環境