Help us understand the problem. What is going on with this article?

Twilio FunctionからStudio Flowを呼び出す

はじめに

Twilio Studioは非常に優れたツールで、エンジニアでない方にも簡単に使えます。
そんな便利なStudioですが、現在Studioのフローを起動するには、以下の3つのトリガーしかありません。

  • Incoming Call: 電話が着信したときに起動します。
  • Incoming Message: メッセージを受信したときに起動します。
  • REST API: 外部から当該フローのREST APIを呼ばれたときに起動します。

これですと、例えばサーバーの監視などの用途で、Twilioから電話をかけるような使い方を想定した場合、REST APIしかトリガーの選択肢がありません。PostmanやCurlなどのツールが使いこなせる人であれば問題ないのですが、非エンジニアでは少し敷居が高いですね。

そこで今回は、Twilio FunctionsというTwilioのサーバーレス環境内からStudioフローを起動する方法をご紹介します。基本的にはコードをコピペして、フローのIDなどを書き換えるだけで対応できるはずなので、非エンジニアの皆さんにも、もちろんエンジニアの皆さんにもフローのテストなどにご利用いただける方法だと思います。

StudioフローのREST API呼び出し

StudioフローをREST APIで呼び出すためには、フローのSIDとFromとToのパラメータが必須となります。
FromとTo以外のパラメータも渡すことが可能ですが、その場合は、Parametersという名前で、かつJSON形式のデータを渡す必要があります。
詳しくは、こちらのドキュメントをご参照ください。

シナリオ

今回はシンプルに、Twilioから指定した相手に電話をかけるサンプルフローを作成し、これをFunctionsから呼び出してみます。
以下の手順に先立ち、予めTwilioで電話番号を一つ購入しておいてください。

手順1. フローを作成する

  • 管理コンソールの左側のスライドメニューから、Studioを選択します。
  • 赤いプラスアイコンをクリックするか、「Create a new flow」を選択して、新しいフローを作成します。
  • FLOW NAMEに適当な名前を入れて、NEXTボタンを押します。
  • キャンパスが表示されたら、WIDGET LIBRARYからMake Outgoing Callをキャンパス上にドラッグアンドドロップします。
  • TriggerボックスのREST APIと、今配置した「call_1」ボックスを結合します。
    スクリーンショット 2018-05-29 12.05.51.png

  • 続いて、WIDGET LIBRARYからSay/Playをキャンバス上にドロップします。

  • call_1のAnsweredと、今ドロップした「say_play_1」を結合します。
    スクリーンショット 2018-05-29 12.59.50.png

  • say_play_1ボックスのプロパティページで、TEXT TO SAY欄に「こんにちは」、LANGUAGEのプルダウンから「Japanese Japan」を選択して、SAVEボタンを押します。
    スクリーンショット 2018-05-29 13.00.18.png

  • 最後に画面上部にある赤いPublishのボタンを押します。

  • 確認のダイアログが表示されるので、Publishボタンを押します。

スクリーンショット 2018-07-26 10.28.37.png

以上でフローが完成しましたので、<Backをクリックして、フローの一覧ページに戻ります。今作成したフローのSID(FWから始まる文字列)をメモ帳などにコピーしておいてください。

手順2. フローを起動するFunctionsを作成する

  • 管理コンソールの左側のスライドメニューから、Runtimeを選択します。
  • Runtimeメニューの中から、Functionsを選択し、さらにConfigureを選択します。
  • Enable ACCOUNT_SID and AUTH_TOKENのチェックボックスをONにします。
    スクリーンショット 2018-05-29 13.07.09.png

  • Dependencies項目の中のtwilioのバージョンを「3.17.1」に変更します。
    スクリーンショット 2018-05-29 13.07.24.png

  • SAVEボタンを押して、設定を保存します。

  • Runtimeメニューの中から、Manageを選択します。

  • 赤いプラスアイコンをクリックするか、「Create a new function」を選択して、新しいFunctionを作成します。

  • New Functionダイアログでは、Blankを選択し、Createボタンを押します。

  • FUNCTION NAME欄に「callFlow」、PATH欄に「/callFlow」と入力します。
    スクリーンショット 2018-05-29 13.12.30.png

  • ACCESS CONTROLのチェックを外します。

  • CODE欄に予め書かれているコードをすべて削除し、以下のコードを貼り付けます。

exports.handler = function(context, event, callback) {
    const twilioClient = context.getTwilioClient();
    twilioClient.studio.flows('FWから始まるフローのSID').executions.create({ 
        to: '+81xxxxxxxx', 
        from: '+81xxxxxxxxx', 
        parameters: JSON.stringify({
            name: "Client"
        })
    })
    .then(function(execution) { 
        console.log(execution.sid); 
        callback(null, execution.sid);        
    })
    .catch(error => {
        console.error(`problem with request: ${error.message}`);
        callback(error.message);
    });
};
  • 3行目に、先程メモしておいたフローのSID(FWから始まる文字列)を書きます。
  • 4行目は、ご自分の携帯電話の番号をE.164形式(先頭の0を+81に置き換えたもの)で置き換えます。
  • 5行目は、Twilioで購入した電話番号に書き換えます。
  • 6〜8行目のパラメータは今回は不要ですが、参考までに書いてあります。
  • SAVEボタンを押して、コードを保存します。
  • しばらくして、デプロイ完了の緑色のバナーが表示されたら、作業はすべて終了です。

テストしてみる

  • 今保存したFunctionのPATH欄の右側にあるコピーアイコンを押して、URLをコピーします。
  • ブラウザを開き、コピーしたURLを実行すると携帯電話に電話がかかり「こんにちは」という声が聞こえれば成功です。

まとめ

今回の手順では、Functionの呼び出しに関してのセキュリティ対策をしていないため、FunctionのPATHがバレてしまうと他の人にも実行されてしまいます。
ですので、あくまでStudioのテストに利用する程度で使ってください。もしFunctionsの呼び出しをセキュアにしたい場合は、こちらの記事も参考にしていただくと良いかと思います。

mobilebiz
フルスタックエンジニア。趣味は料理。 2014年7月に、留守番電話が文字で届く国内初の留守電サービス「TRANSREC」をリリース。 2015年4月にSmart Communication Award 2015で「自動電話リレーサービス」が最優秀賞を受賞。 2016年2月よりTwilioエヴァンジェリスト。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした