TwiML™ Message: 応答

あなたのTwilio番号にメッセージが到着すると、Twilioはその番号に設定されたメッセージURLにHTTPリクエストが発行されます。そのリクエストの中で、Twilioがそのメッセージにどう応答するのか教えることができます。

HTTP クライアントとしての Twilio

Twilio は通常のウェブ ブラウザと同じように振る舞いますので、新しいことを覚える必要はありません。

  • Cookie : Twilio は通常のウェブ ブラウザと同じように、HTTP cookie を受信し、リクエストに追加します。
  • リダイレクト : Twilio は通常のウェブ ブラウザと同じように、HTTP リダイレクト (HTTP ステータス コード 301、307 など) をサポートします。
  • キャッシュ : Twilio は、HTTP ヘッダーでキャッシュが有効になっている場合 (ETag と Last-Modified ヘッダー)、および HTTP のメソッドが GET の場合、通常のウェブ ブラウザと同じように、ファイルをキャッシュします。

Cookie

Twilio は、2 つの電話番号の間でやり取りされる複数の SMS をまたいで cookie の状態を保持します。 このため、複数のメッセージを 1 つの会話として扱うことができ、その会話のセッション識別子などのデータを cookie に格納して、後で使用できます。 この会話の cookie は、4 時間使用しないと期限切れになります。

MIME Type に対応

Twilio はユーザー アプリケーションのレスポンスの MIME Type に応じて異なる動作をします。

MIME Type 動作
text/xml, application/xml, text/html Twilio は返却された文書を TwiML XML の命令のセットとして解釈します。 詳細は XML 動詞のセクションを参照してください。 これは最もよく使われるレスポンスです。
text/plain Twilioはメッセージ中にある送信者にテキストファイルの内容を返します。

Twilio の TwiML インタープリター

Twilio のリクエストに対してユーザー アプリケーションが XML で応答すると、Twilio は TwiML インタープリターでユーザ-の文書を実行します。 しくみをシンプルに保つために、TwiML インタープリターは、特別に命名された少数の XML 要素のみを解釈します。 TwiML では、これらの要素は 3 つのグループに分けられます。ルートの <Response> 要素動詞名詞です。 それぞれのグループについて説明します。

インタープリターはTwiMLドキュメントを上から下に見て動詞を順番に実行します。例として下記のTwiMLメッセージはhttps://demo.twilio.com/sms/welcomeにコントロールをリダイレクトする前に"Hello World" を送信者に返信します。

<?xml version="1.0" encoding="UTF-8" ?>
<Response>
    <Message>Hello World!</Message>
    <Redirect>https://demo.twilio.com/sms/welcome</Redirect>
</Response>

1 つの TwiML 文書に複数の <Message> 動詞を挿入して、複数のメッセージを送信できます。 たとえば、

<?xml version="1.0" encoding="UTF-8" ?>
<Response>
    <Message>This is message 1 of 2.</Message>
    <Message>This is message 2 of 2.</Message>
</Response>

TwiMLエレメントである、動詞、名詞は、大文字と小文字を区別します。<message><Message>の意味で使用するとエラーになります。属性名も同様に大文字と小文字を区別キャメルケースです。XMLコメントも入れることができ、インタープリターはそれらを無視します。

<Response> 要素

<Response> 要素は、Twilio の XML マークアップのルート要素です。 Twilio のリクエストに対する TwiML レスポンスでは、必ずすべての動詞をこの要素の中にネストします。 それ以外の構造は無効となります。

例 :
<?xml version="1.0" encoding="UTF-8"?>
<Response>
    <Message>I'm hungry!</Message>
</Response>

TwiML 動詞

TwiMLドキュメントで最も使われるXMLエレメントはTwiML動詞です。動詞名は大文字小文字を区別します、属性名も同様です。一つのコアTwiMLメッセージ動詞と一つの第二動詞です。それぞれを詳しい説明があります。コア動詞は

  • <Message>到着したメッセージに返信をする。

制御フローが別の文書に移ったために、TwiML インタープリターが TwiML 文書内の動詞に到達しない場合がありますので、注意してください。 通常は、動詞の action 属性を設定している場合に起こります。 たとえば、<Message> の後に <Redirect> が続いており、<Message> に action URL を設定している場合、<Redirect> は不達となります。 この場合、SMS セッションのフローは、action URL リクエストに対するアプリケーションのレスポンスとして受信した TwiML に従って進みます。

制御フローに関係する動詞は、 <Message><Redirect> です。

TwiML 名詞

TwiMLの名詞は動詞の内側にネストできます。いずれの動詞でも可能です。しかし<Media><Body>名詞とともに使われる<Message>では、名詞であるXMLエレメントはネストできます。

ステータス・コールバック

Status callbacks do not control application flow, so TwiML does not need to be returned; however, it's recommended that you respond to status callbacks with either a 204 No Content or a 200 OK with Content-Type: text/xml and an empty <Response/> in the body. Failure to respond properly will result in warnings in Debugger.

参考

インバウンドメッセージを待たずにメッセージを送信したいですか?アウトバウンドメッセージのドキュメントを御覧ください。

Need some help?

We all do sometimes; code is hard. Get help now from our support team, or lean on the wisdom of the crowd browsing the Twilio tag on Stack Overflow.