メインコンテンツにスキップ
You are viewing the Japanese site, but your language preference is set to English. Switch to English site →
Functions

サーバーレスのFunctionsでより短期間で構築

FunctionsはTwilioのサーバーレス環境です。イベント駆動型のマイクロサービスを短期間で作成し、サードパーティのエンドポイントと統合し、カスタムロジックでTwilio Studioフローを拡張することができます。

illo-hero-functions

コンセプトから初版まで
より少ないステップで

JavaScriptコードとの関係性が強いJSONコードが、メッセージングや通話などのさまざまな機能につながり、最終的にユーザーに届きます。

Node.jsにより、イベント駆動型のマイクロサービスを構築

Node.jsを使用することにより、拡張性に優れた、商用レベルのイベント駆動型Twilioアプリケーションを作成できます。安定性に不安を抱くことなく、イノベーションを起こせます。短期間の開発を迅速に行うことができます。StudioアプリケーションとIVRシステムにはカスタムロジックを使用します。

データベースに関連付けられたNode jsのコードは、サードパーティのさまざまなサービスを統合しています。

サードパーティのエンドポイントとの統合

Node.jsの機能とnpmエコシステムを利用し、データの変換とフィルタリングを行うことにより、任意のサードパーティシステムと統合できます。外部APIリクエストを簡単に作成し、Webhookの設定により、Twilio製品や外部システムからデータを取り込むことができます。

Functionsとの関連性が強いStudioは、メッセージングや通話などのさまざまなアクションにつながります。

お客様のコードをTwilioで

強力なAPIの構築、複雑な統合、IVRへのカスタムロジックの追加など、アイデアを短期間で実現できます。Twilio Functionsに運用のオーバーヘッドを任せることで、より短期間で市場に投入することができます。

Twilio Codeは、世界中のメトリックスの成長を支援しています。

自動スケーリングと透明性のある料金

Twilioのサーバーレス系プロダクトは、ゼロ需要からピーク需要まで自動的にスケーリングし、組織のコストを最小限に抑える従量課金制のビジネスモデルを特徴としています。

Functionsのユースケース

Functionsなら
5分以内に展開可能

Send an SMS from Twilio Functions
  • Node.js

                    <div class="highlight"><span class="code-line"><span class="nx">exports</span><span class="p">.</span><span class="nx">handler</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">async</span><span class="w"> </span><span class="kd">function</span><span class="p">(</span><span class="nx">context</span><span class="p">,</span><span class="w"> </span><span class="nx">event</span><span class="p">,</span><span class="w"> </span><span class="nx">callback</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
</span><span class="code-line"><span class="w">  </span><span class="kd">const</span><span class="w"> </span><span class="nx">client</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">context</span><span class="p">.</span><span class="nx">getTwilioClient</span><span class="p">();</span><span class="w"></span>
</span><span class="code-line"><span class="w">  </span><span class="kd">const</span><span class="w"> </span><span class="nx">message</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">await</span><span class="w"> </span><span class="nx">client</span><span class="p">.</span><span class="nx">messages</span><span class="p">.</span><span class="nx">create</span><span class="p">({</span><span class="w"></span>
</span><span class="code-line"><span class="w">    </span><span class="nx">to</span><span class="o">:</span><span class="w"> </span><span class="s1">&#39;+15558675310&#39;</span><span class="p">,</span><span class="w"></span>
</span><span class="code-line"><span class="w">    </span><span class="kr">from</span><span class="o">:</span><span class="w"> </span><span class="s1">&#39;+15017122661&#39;</span><span class="p">,</span><span class="w"></span>
</span><span class="code-line"><span class="w">    </span><span class="nx">body</span><span class="o">:</span><span class="w"> </span><span class="s1">&#39;Hi there!&#39;</span><span class="w"></span>
</span><span class="code-line"><span class="w">  </span><span class="p">});</span><span class="w"></span>
</span><span class="code-line"><span class="w">  </span><span class="nx">callback</span><span class="p">(</span><span class="kc">null</span><span class="p">,</span><span class="w"> </span><span class="nx">message</span><span class="p">.</span><span class="nx">sid</span><span class="p">);</span><span class="w"></span>
</span><span class="code-line"><span class="p">};</span><span class="w"></span>
</span></div>

                

Twilioの電話番号からSMSを送信

Twilioの電話番号からSMSを送信できます。わずか数行のコードで、Twilio Functionsを活用したTwilio SMSをお客様の電話に着信させることができます。

SMSの送信

Send OTP from Twilio Functions
  • Node.js

                    <div class="highlight"><span class="code-line"><span class="nx">exports</span><span class="p">.</span><span class="nx">handler</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">async</span><span class="w"> </span><span class="kd">function</span><span class="p">(</span><span class="nx">context</span><span class="p">,</span><span class="w"> </span><span class="nx">event</span><span class="p">,</span><span class="w"> </span><span class="nx">callback</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
</span><span class="code-line"><span class="w">  </span><span class="kd">const</span><span class="w"> </span><span class="nx">client</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">context</span><span class="p">.</span><span class="nx">getTwilioClient</span><span class="p">();</span><span class="w"></span>
</span><span class="code-line"><span class="w">  </span><span class="kd">const</span><span class="w"> </span><span class="nx">service</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">context</span><span class="p">.</span><span class="nx">VERIFY_SERVICE_SID</span><span class="p">;</span><span class="w"></span>
</span><span class="code-line">
</span><span class="code-line"><span class="w">  </span><span class="kd">const</span><span class="w"> </span><span class="nx">verification</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">await</span><span class="w"> </span><span class="nx">client</span><span class="p">.</span><span class="nx">verify</span><span class="w"></span>
</span><span class="code-line"><span class="w">    </span><span class="p">.</span><span class="nx">services</span><span class="p">(</span><span class="nx">service</span><span class="p">)</span><span class="w"></span>
</span><span class="code-line"><span class="w">    </span><span class="p">.</span><span class="nx">verifications</span><span class="p">.</span><span class="nx">create</span><span class="p">({</span><span class="w"></span>
</span><span class="code-line"><span class="w">      </span><span class="nx">to</span><span class="o">:</span><span class="w"> </span><span class="s1">&#39;+15558675310&#39;</span><span class="p">,</span><span class="w"></span>
</span><span class="code-line"><span class="w">      </span><span class="nx">channel</span><span class="o">:</span><span class="w"> </span><span class="s1">&#39;sms&#39;</span><span class="p">,</span><span class="w"></span>
</span><span class="code-line"><span class="w">      </span><span class="nx">locale</span><span class="o">:</span><span class="w"> </span><span class="s1">&#39;en&#39;</span><span class="p">,</span><span class="w"></span>
</span><span class="code-line"><span class="w">    </span><span class="p">});</span><span class="w"></span>
</span><span class="code-line"><span class="w">  </span><span class="nx">callback</span><span class="p">(</span><span class="kc">null</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;Verfication OTP sent&#39;</span><span class="p">);</span><span class="w"></span>
</span><span class="code-line"><span class="p">};</span><span class="w"></span>
</span></div>

                

ワンタイムパスコード認証(OTP)の送信

SMSやWhatsApp、音声、メールによるワンタイムパスコード(OTP)エクスペリエンスなど、既存のTwilioサービスとFunctionsを統合します。

OTPの送信

Log Incoming SMS in Google Sheets
  • Node.js

                    <div class="highlight"><span class="code-line"><span class="kd">const</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nx">google</span><span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">require</span><span class="p">(</span><span class="s1">&#39;googleapis&#39;</span><span class="p">);</span><span class="w"></span>
</span><span class="code-line"><span class="kd">const</span><span class="w"> </span><span class="nx">fs</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">require</span><span class="p">(</span><span class="s1">&#39;fs&#39;</span><span class="p">).</span><span class="nx">promises</span><span class="p">;</span><span class="w"></span>
</span><span class="code-line">
</span><span class="code-line"><span class="nx">exports</span><span class="p">.</span><span class="nx">handler</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">async</span><span class="w"> </span><span class="kd">function</span><span class="w"> </span><span class="p">(</span><span class="nx">context</span><span class="p">,</span><span class="w"> </span><span class="nx">event</span><span class="p">,</span><span class="w"> </span><span class="nx">callback</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
</span><span class="code-line"><span class="w">  </span><span class="kd">const</span><span class="w"> </span><span class="nx">twiml</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="ow">new</span><span class="w"> </span><span class="nx">Twilio</span><span class="p">.</span><span class="nx">twiml</span><span class="p">.</span><span class="nx">MessagingResponse</span><span class="p">();</span><span class="w"></span>
</span><span class="code-line"><span class="w">  </span><span class="kd">const</span><span class="w"> </span><span class="nx">authJson</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">JSON</span><span class="p">.</span><span class="nx">parse</span><span class="p">(</span><span class="w"></span>
</span><span class="code-line"><span class="w">    </span><span class="k">await</span><span class="w"> </span><span class="nx">fs</span><span class="p">.</span><span class="nx">readFile</span><span class="p">(</span><span class="nx">Runtime</span><span class="p">.</span><span class="nx">getAssets</span><span class="p">()[</span><span class="s1">&#39;/credentials.json&#39;</span><span class="p">].</span><span class="nx">path</span><span class="p">)</span><span class="w"></span>
</span><span class="code-line"><span class="w">  </span><span class="p">);</span><span class="w"></span>
</span><span class="code-line">
</span><span class="code-line"><span class="w">  </span><span class="kd">const</span><span class="w"> </span><span class="nx">auth</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="ow">new</span><span class="w"> </span><span class="nx">google</span><span class="p">.</span><span class="nx">auth</span><span class="p">.</span><span class="nx">JWT</span><span class="p">({</span><span class="w"></span>
</span><span class="code-line"><span class="w">    </span><span class="nx">email</span><span class="o">:</span><span class="w"> </span><span class="nx">authJson</span><span class="p">.</span><span class="nx">client_email</span><span class="p">,</span><span class="w"></span>
</span><span class="code-line"><span class="w">    </span><span class="nx">key</span><span class="o">:</span><span class="w"> </span><span class="nx">authJson</span><span class="p">.</span><span class="nx">private_key</span><span class="p">,</span><span class="w"></span>
</span><span class="code-line"><span class="w">    </span><span class="nx">scopes</span><span class="o">:</span><span class="w"> </span><span class="p">[</span><span class="s1">&#39;https://www.googleapis.com/auth/spreadsheets&#39;</span><span class="p">],</span><span class="w"></span>
</span><span class="code-line"><span class="w">  </span><span class="p">});</span><span class="w"></span>
</span><span class="code-line"><span class="w">  </span><span class="kd">const</span><span class="w"> </span><span class="nx">sheets</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">google</span><span class="p">.</span><span class="nx">sheets</span><span class="p">({</span><span class="w"></span>
</span><span class="code-line"><span class="w">    </span><span class="nx">version</span><span class="o">:</span><span class="w"> </span><span class="s1">&#39;v4&#39;</span><span class="p">,</span><span class="w"></span>
</span><span class="code-line"><span class="w">    </span><span class="nx">auth</span><span class="p">,</span><span class="w"></span>
</span><span class="code-line"><span class="w">  </span><span class="p">});</span><span class="w"></span>
</span><span class="code-line">
</span><span class="code-line"><span class="w">  </span><span class="k">await</span><span class="w"> </span><span class="nx">sheets</span><span class="p">.</span><span class="nx">spreadsheets</span><span class="p">.</span><span class="nx">values</span><span class="p">.</span><span class="nx">append</span><span class="p">({</span><span class="w"></span>
</span><span class="code-line"><span class="w">    </span><span class="nx">spreadsheetId</span><span class="o">:</span><span class="w"> </span><span class="nx">context</span><span class="p">.</span><span class="nx">DOCUMENT_ID</span><span class="p">,</span><span class="w"></span>
</span><span class="code-line"><span class="w">    </span><span class="nx">range</span><span class="o">:</span><span class="w"> </span><span class="s2">&quot;&#39;&quot;</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="nx">context</span><span class="p">.</span><span class="nx">SHEET_NAME</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="s2">&quot;&#39;&quot;</span><span class="p">,</span><span class="w"></span>
</span><span class="code-line"><span class="w">    </span><span class="nx">valueInputOption</span><span class="o">:</span><span class="w"> </span><span class="s1">&#39;USER_ENTERED&#39;</span><span class="p">,</span><span class="w"></span>
</span><span class="code-line"><span class="w">    </span><span class="nx">requestBody</span><span class="o">:</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
</span><span class="code-line"><span class="w">      </span><span class="nx">values</span><span class="o">:</span><span class="w"> </span><span class="p">[[</span><span class="nx">event</span><span class="p">.</span><span class="nx">SmsSid</span><span class="p">,</span><span class="w"> </span><span class="nx">event</span><span class="p">.</span><span class="nx">From</span><span class="p">,</span><span class="w"> </span><span class="nx">event</span><span class="p">.</span><span class="nx">Body</span><span class="p">]],</span><span class="w"></span>
</span><span class="code-line"><span class="w">    </span><span class="p">},</span><span class="w"></span>
</span><span class="code-line"><span class="w">  </span><span class="p">});</span><span class="w"></span>
</span><span class="code-line">
</span><span class="code-line"><span class="w">  </span><span class="nx">twiml</span><span class="p">.</span><span class="nx">message</span><span class="p">(</span><span class="s1">&#39;The SMS was successfully saved.&#39;</span><span class="p">);</span><span class="w"></span>
</span><span class="code-line"><span class="w">  </span><span class="nx">callback</span><span class="p">(</span><span class="kc">null</span><span class="p">,</span><span class="w"> </span><span class="nx">twiml</span><span class="p">);</span><span class="w"></span>
</span><span class="code-line"><span class="p">};</span><span class="w"></span>
</span></div>

                

受信したテキストメッセージのログをGoogle Sheetsに保存

Twilioの電話番号がテキストメッセージを受信すると、Google Sheetsドキュメントに新しい行を追加して、メッセージの内容、送信者、到着時刻をトラッキングします。

着信メッセージのログ採取

messaging-customer-quote-portrait.png

「コード行をコメントアウトして関数が何をしているか説明する必要はありません。Twilioのコードは実に明快で、設定も簡単です」

Nate Grieb氏, Product Owner

サーバーレスとTwilio Functionsを試す

Functionsによりアプリケーションを起動し、実行することができます。