2023年5月1日を持ちまして、株式会社KDDIウェブコミュニケーションズのTwilioリセール事業が終了したため、本記事に記載されている内容は正確ではないことを予めご了承ください。
はじめに
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」ボックスを結合します。
- 続いて、WIDGET LIBRARYからSay/Playをキャンバス上にドロップします。
- call_1のAnsweredと、今ドロップした「say_play_1」を結合します。
- say_play_1ボックスのプロパティページで、TEXT TO SAY欄に「こんにちは」、LANGUAGEのプルダウンから「Japanese Japan」を選択して、SAVEボタンを押します。
- 最後に画面上部にある赤いPublishのボタンを押します。
- 確認のダイアログが表示されるので、Publishボタンを押します。
以上でフローが完成しましたので、<Backをクリックして、フローの一覧ページに戻ります。今作成したフローのSID(FWから始まる文字列)をメモ帳などにコピーしておいてください。
手順2. フローを起動するFunctionsを作成する
- 管理コンソールの左側のスライドメニューから、Runtimeを選択します。
- Runtimeメニューの中から、Functionsを選択し、さらにConfigureを選択します。
- Enable ACCOUNT_SID and AUTH_TOKENのチェックボックスをONにします。
- Dependencies項目の中のtwilioのバージョンを「3.17.1」に変更します。
- SAVEボタンを押して、設定を保存します。
- Runtimeメニューの中から、Manageを選択します。
- 赤いプラスアイコンをクリックするか、「Create a new function」を選択して、新しいFunctionを作成します。
- New Functionダイアログでは、Blankを選択し、Createボタンを押します。
- FUNCTION NAME欄に「callFlow」、PATH欄に「/callFlow」と入力します。
- 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の呼び出しをセキュアにしたい場合は、こちらの記事も参考にしていただくと良いかと思います。