TsuyoshiKusakaの日々思うこと その2

ITエンジニア、@tsuyoshikusaka

twilioからGoogle Apps Scriptを経由して別サービスにつなぐ

電話をかけるとhttpリクエストをとばせるtwilioから、Google Apps Scriptを経由して、別サービスに接続してみた。

 (1)twilioに電話をかけると、Google Apps Script(1回目用)にhttpリクエストがとぶ
 (2)Google Apps Scriptでhttpリクエストを受けて、TwiMLを返して、電話のプッシュを促す音声を流す
 (3)電話のプッシュをすると、Google Apps Script(2回目用)にhttpリクエストがとぶ
 (4)Google Apps Scriptでhttpリクエストを受けて、別サービスへの処理を行い、処理結果を含むTwiMLを返して、音声で流す


twilio側の設定としては、トライアルで利用登録して、「トライアル番号の設定」から「Voice Request URL」に、Google Apps Script(1回目用)のURLを設定しておくだけ。


準備したGoogle Apps Scriptは以下のような感じ。

●1回目のhttpリクエストを受ける処理

function doGet(e) {
return receive_(e);
}

function doPost(e) {
return receive_(e);
}

function receive_(e) {
var caller = e.parameter['Caller'];
//※あらかじめ登録された電話番号以外なら無視する処理をはさんでいる

var out = ContentService.createTextOutput(buildXml());
out.setMimeType(ContentService.MimeType.XML);

return out;
}

function buildXml() {
var out_string = '';

out_string += '<Response>';
out_string += '<Gather finishOnKey="#" action="https://script.google.com/macros/s/xxxxx/exec" method="post" timeout="30">'; //●ここには2回目のhttpリクエストをとばすURLを入れる
out_string += '<Say language="ja-jp" voice="woman">';
out_string += 'こちらは電話自動処理システムです。';
out_string += '「処理A」は1を、';
out_string += '「処理B」は2を、';
out_string += '押した後、シャープを押してください。';
out_string += '</Say>';
out_string += '</Gather>';
out_string += '</Response>';

return out_string;
}

●2回目(プッシュ後)のhttpリクエストを受ける処理

function doGet(e) {
return receive_(e);
}

function doPost(e) {
return receive_(e);
}

function receive_(e) {
var digits = e.parameter['Digits'];
var caller = e.parameter['Caller'];
//※あらかじめ登録された処理番号以外および電話番号以外なら無視する処理をはさんでいる

var id = xxxxx(); //※他サービスとつなぐ処理を行い、結果を取得

var out = ContentService.createTextOutput(buildXml(id));
out.setMimeType(ContentService.MimeType.XML);

return out;
}

function buildXml(id) {
var out_string = '';
var id_string = String(id);

out_string += '<Response>';

out_string += '<Say language="ja-jp" voice="woman">';
out_string += '結果アイディーは';
out_string += '</Say>';
out_string += '<Pause length="1"/>';
out_string += '<Say language="ja-jp" voice="woman">';
for (i = 0; i < id_string.length; i++) {
out_string += id_string[i] + "、";
}
out_string += 'です';
out_string += '</Say>';
out_string += '</Response>';

return out_string;
}

要はtwilioからのhttpに対する処理を行って、xmlを返すだけで実現できた。

ちなみに、実際に接続したサービスはクラウドBPMQuestetra BPM Suite」だが、今回の本題ではないので、詳細はまた別途まとめる予定。