Blog
Twilio Pay + Node.jsで一方的に支払いを要求する電話をかけてみる
Stripeコミュニティで「Twilio使えば電話でカード決済できるよ!」って話を聞いたので試してみました。が、以下の記事が親切すぎてセットアップ方法などはほぼこれみればOKです。
これだけだとちょっと面白くない記事にならないので、「電話をかけて支払い」ではなく「支払わせる電話をかける」方向で触ってみます。
準備
下の記事のチュートリアルは完了させてください。セットアップ方法などはここが一番だと思います。
Node.jsの準備
いつも通りCLIから実行する準備をします。
$ mkdir twiliopay && cd twiliopay
$ npm init -y
$ npm i -S twilio querystring
$ touch index.js
電話をかけるスクリプト
Account SIDとauthTokenが必要ですので、ダッシュボードから取得しましょう。
//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との連携ができるのかどうか未検証ですが、スポットの料金追加で単発決済扱いにすればいけるでしょう(たぶん)
Tools to Support Stripe Development
We provide helpful tools to extend the Stripe Dashboard and streamline development and testing.
View All ToolsRelated Articles
Support This Project
If you find this content helpful, consider supporting the project through GitHub Sponsors. Your support helps maintain and improve these tools.
