Twilioでランダムな値を返すSMS自動返信を設定してみた

Twilioでランダムな値を返すSMS自動返信を設定してみた

ランダムな値を返すSMS自動返信
Clock Icon2025.03.27

こんにちは、昴です。
今回はランダムな値を返すSMS自動返信についてまとめていきます。

はじめに

Twilioは電話やSMS、チャットなどのコミュニケーション機能を組み込むためのクラウドベースのAPIプラットフォームです。TwilioではMessagingやStudioを利用して送られてきたSMSに対して、設定しておいた文章を自動で返信することができ、条件分岐などもすることが可能です。
今回はSMSでランダムな値を返すフローを作成してみます。ランダムな値を返すフローはいろいろな場面で使用できるかと思いますが、今回はイメージしやすいように毎朝見る星座占いのようなものを作成してみます。

設定

Functions and Assets

まずTwilioのコンソールからFunctions and AssetsのOverviewへ移動します。Create serviceから新しいServiceの作成画面へ移行し、Service名は「random」としておきます。

Functions

Add > Add Functionと選択し、Function名を入力します。(今回は「random」)
内容としては下記を記載します。完了したらSave > Deploy Allと選択していきます。

exports.handler = function(context, event, callback) {
  const randomValue1 = Math.floor(Math.random() * 5) + 1;
  const randomValue2 = Math.floor(Math.random() * 10) + 1;  
  // 運勢テキストのマッピング
  const fortuneText = {
1: "とても良い一日になりそう!",
2: "まずまずの運勢です",
3: "普通の一日です",
4: "少し慎重に行動しましょう",
5: "今日は静かに過ごすのがおすすめ"
  };
  // カラーのマッピング
  const colorText = {
1: "ゴールド",
2: "シルバー",
3: "レッド",
4: "ブルー",
5: "グリーン",
6: "パープル",
7: "ピンク",
8: "オレンジ",
9: "ホワイト",
10: "ブラック"
  };
  const response = {
fortune: fortuneText[randomValue1],
color: colorText[randomValue2],
random_value_1_5: randomValue1,
random_value_1_10: randomValue2
  };
  callback(null, response);
};

LogにてDeployedを確認したらServiceの作成は完了です。後ほど使用するため、Copy URLからURLをコピーしておきます。

Deployed20250326

Studio

続いてStudioへ移動します。
Studioへ移動したら、まずCreate Flowを選択します。

フロー作成①

次にフロー名を入力してフローの編集画面へ移行します。またフローは何もない上位から作成するため「Start from scratch」を選択します。

フロー名の入力2503②

ここまででフローの作成画面まで来ました。ここからはフローの中身を作成していきます。

Make HTTP Request

まず「Make HTTP Request」Widgetを設定します。
TriggerのIncomming MessageからWidgetへ繋げて設定していきます。設定内容は下記の通りになります。

  • Method:GET
  • Request URL:[作成したFunctionのURL]
  • Content Type:Form URL Encoded

HTTP Req20250326

Set Variables

次に「Set Variables」Widgetを設定します。
Variablesの「+」からVariablesを追加し、下記のKeyとValueを設定します。

SetVariables20250326

  • 1つ目

    • Key zodiac
    • Value {{trigger.message.Body}}
  • 2つ目

    • Key fortune
    • Value {{widgets.random.parsed.fortune}}
  • 3つ目

    • Key color
    • Value {{widgets.random.parsed.color}}
  • 4つ目

    • Key response
    • Value {{widgets.random.body}}
    • Parse as JSON Object有効

Splid Based On

続いて「Splid Based On」Widgetを設定していきます。
まずVARIABLE TO TESTにはflow.variables.zodiacを入力します。Transitionsタブへ移動し、「NEW CONDITION」にて送信されたSMSの本文(星座)に応じた12通りの分岐を作成していきます。星座名とマッチする設定としては下記になります。

SplidBasedOn20250326

  • Equal to
  • ○○座
  • 移行先はこの後作成する「Send Mesage」Widget

この分岐を作成することで、星座以外の本文が送信された場合に「星座を入力してください」といった自動返信をすることができます。

Send Message

続いて実際に返信をするための「Send Message」Widgetを設定していきます。
このWidgetは星座名が正しく入力された場合と正しくなかった場合の2つを作成します。
まず入力が正しい場合のWidgetは下記のように設定します。これにより与えられたランダムな値に応じて色や運勢、アドバイスが入力されます。
Message TypeはCustomを選択し、Message Bodyには下記を入力します。

⭐{{trigger.message.Body}}の今日の運勢⭐

ラッキーカラー:
{{widgets.random.parsed.color}}

アドバイス:
{{widgets.random.parsed.fortune}}

Widgetの入力が完了したら1つ前のWidgetの星座ごとの選択肢をすべてこのSend Message WIdgetに繋げます。

SendMessage20250326

次に入力が正しくなかった場合のWidgetは下記のような文章を設定しておき、正しい入力をしていただくように促します。先ほど同様Message TypeはCustomを選択し、Message Bodyには下記を入力します。

申し訳ありません。
星座名が正しく認識できませんでした。
以下のいずれかの星座名を送信してください:

おひつじ座、おうし座、ふたご座、かに座、しし座、おとめ座、てんびん座、さそり座、いて座、やぎ座、みずがめ座、うお座

Widgetの設定が完了したら、1つ前のWidgetのNo Condition MatchesをこのWidgetに繋げます。

SendMessage20250326②

最後にPublishをクリックし、フローを保存、公開していきます。
公開後はPhone Numbers > Manage > Active numbersへ移動し、設定したい電話番号に作成したフローを設定していきます。

フロー設置20250326

確認

それでは実際の動きを確認していきます。
まず、正しい入力の場合の返信を確認していきます。SMSで試しに「しし座」と入力し送信します。すると下記のような自動返信がありました。

ランダム返信①

次にもう一度「しし座」と入力して送信します。

ランダム返信②

このように同じ内容で送信してもその都度回答が異なっていることが分かります。

続いて入力が正しくない場合を見ていきます。「昴座」と入力して送信します。

正しくない入力

このように入力が正しくない場合の返信が返ってきたことが確認できました。

まとめ

今回はランダムな値を返すSMS自動返信についてまとめました。
本ブログが少しでも参考になれば幸いです。

告知

Twilio/SendGridセミナーを毎月開催しています

クラスメソッドでは毎月Twilio/SendGridのセミナーを実施しています。

クラスメソッドではTwilio/SendGridのセミナーを毎月開催しております。いずれもTwilio及びSendGridを良く知らない方向けに基本的な部分から解説する内容となっておりますので、今後Twilio/SendGridの導入を検討している方や、既に導入済で改めて基本的な部分を勉強したいと考える方は、是非お気軽にご参加いただければと思います。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.