Blog

Twilio Pay + Node.jsで一方的に支払いを要求する電話をかけてみる

Stripeコミュニティで「Twilio使えば電話でカード決済できるよ!」って話を聞いたので試してみました。が、以下の記事が親切すぎてセットアップ方法などはほぼこれみればOKです。

StripeとTwilio Payで電話決済

これだけだとちょっと面白くない記事にならないので、「電話をかけて支払い」ではなく「支払わせる電話をかける」方向で触ってみます。

準備

下の記事のチュートリアルは完了させてください。セットアップ方法などはここが一番だと思います。

StripeとTwilio Payで電話決済

Node.jsの準備

いつも通りCLIから実行する準備をします。

$ mkdir twiliopay && cd twiliopay
$ npm init -y
$ npm i -S twilio querystring
$ touch index.js

電話をかけるスクリプト

Account SIDauthTokenが必要ですので、ダッシュボードから取得しましょう。

//app.js
var querystring = require('querystring');
const twilio = require('twilio');
const accountSid ='ACCOUNT_SID';
const authToken = 'AUTH_TOKEN';
const client = twilio(accountSid, authToken);

// 喋らせる内容
const twiml = `<Response>
  <Say language="ja-JP" voice="Polly.Takumi">ただいまより、クレジットカードで決済を行います。お支払い金額は990円です。</Say>
  <Pay chargeAmount="990" currency="jpy" postalCode="false" action="https://">
    <Prompt for="payment-card-number">
        <Say language="ja-JP" voice="Polly.Mizuki">まずは、クレジットカード番号を入力してください。入力が終わりましたら、シャープを押して下さい。</Say>
    </Prompt>
    <Prompt for="expiration-date">
        <Say language="ja-JP" voice="Polly.Mizuki">有効期限を、月と年のそれぞれ2桁の数字で入力してください。入力が終わりましたら、最後にシャープを押して下さい。</Say>
    </Prompt>
    <Prompt for="security-code">
        <Say language="ja-JP" voice="Polly.Mizuki">セキュリティコードを入力してください。セキュリティコードは、カードの裏面に記載されている3桁のコードです。セキュリティコードの最後にシャープを押して下さい。</Say>
    </Prompt>
  </Pay>
   <Say language="ja-JP" voice="Polly.Mizuki">990円の支払いが完了しました。ご利用ありがとうございました。</Say>
</Response>`;

// 電話をかける処理
client.calls.create({
  to: '+81<YOUR_PHONE_NUMBER>', //コール先の番号
  from: '+81<YOUR_TWILIO_NUMBER>', // 取得したtwilioの番号.
  url: 'https://twimlets.com/echo?Twiml=' + querystring.escape(twiml)
}, function (err, responseData) {
  if(err) throw err;
  console.log(responseData.from);
});

これをCLIから実行すると、TOに指定した番号に電話がかかります。そしてXMLに記述した内容が再生されますので、唐突に電話で990円のカード支払いを要求されることになります。

決済結果はStripeで

決済自体はStripeで実行されていますので、そちらで支払い状況などは確認できます。

使い所

知り合いへのいたずらぱっと思いつくのは、SaaSの料金決済でしょうか。

  • 利用状況がプラン上限に迫っている or カード決済に失敗した場合
  • Twilioからユーザーに架電して通知
  • その電話でそのまま再決済

なんてことができないかなぁと思っています。Billingとの連携ができるのかどうか未検証ですが、スポットの料金追加で単発決済扱いにすればいけるでしょう(たぶん)