1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Twilio Studioをさわってみた2

Posted at

前回からの続きで、Twilio StudioからGCP Cloud Functions1を呼んでみました。

必要なもの

  • Twilioアカウント
  • GCPアカウント

作業概要

 1. GCP Cloud Functions作成
 2. フロー修正
 3. 電話着信時の設定
 4. 動作確認

1. GCP Cloud Functions作成

Cloud Datastoreに保存したTodoリストから本日分を検索し、日本語のメッセージを返す関数を作成します。
合わせてTodoリストのデータをCloud Datastoreに登録します。

Cloud Datastoreの内容

datastore.png

Cloud Functionsの内容

index.js
const Datastore = require('@google-cloud/datastore');

const datastore = new Datastore({
  projectId: 'プロジェクトID',
});

exports.todolist = (req, res) => {
  let today_JP = new Date();
  today_JP.setUTCHours(-9,0,0,0);
  let tomorrow_JP = new Date();
  tomorrow_JP.setUTCHours(-9,0,0,0);
  tomorrow_JP.setDate (tomorrow_JP.getDate() + 1);
  
  const query = datastore.createQuery('todo')
    .filter('開始時刻', '>=', today_JP)
    .filter('開始時刻', '<', tomorrow_JP)
    .order('開始時刻');
  query.run().then(results => {
      let message;
      const todolist = results[0];
      message = '本日の予定は'+todolist.length+'件です。'

      todolist.forEach(todo => {
        const task = todo['タスク'];
        let begin = todo['開始時刻'];
        let end = todo['終了時刻'];
        
        begin.setUTCHours(begin.getUTCHours() + 9)
        end.setUTCHours(end.getUTCHours() + 9)
        const begin_hour = begin.getUTCHours();
        const begin_min = begin.getUTCMinutes();
        const end_hour = end.getUTCHours();
        const end_min = end.getUTCMinutes();
        
        message = message
          + begin_hour + '' + begin_min + '' + 'から'
          + end_hour + '' + end_min + '' + 'まで'
          + task + 'の予定があります。';
      });
      message = message + '以上となります。'
      res.status(200).send(message);
    })
    .catch(err => {
      console.log(err);
      res.status(400).send('予定が取得できませんでした。');
    });
};
package.json
{
  "name": "todolist",
  "version": "0.0.1",
  "dependencies": {
    "@google-cloud/datastore": "latest"
  }
}

2. フロー修正

前回のフロー図から修正します。

修正後のフロー図

flow3.png

1. HTTP Requestを配置する

 1. HTTP Requestを右側から選択して配置
 2. Split_1の1と接続
 3. Successをsay_play_2に接続
 3. 以下を設定
  REQUEST METHOD: POST (GETでも可)
  REQUEST URL: Cloud FunctionsのトリガーのURLを指定

2. say_play_2を変更

 1. 以下に変更
  TEXT TO SAY: {{widgets.http_1.body}}

3. gather_1を変更

 1. 以下に変更
  TEXT TO SAY: 本日の予定を聞く場合は1を、終了する場合は2を押してください。

3. 電話着信時の設定

前回のフローを変更した場合は、修正の必要はありません。
新規にフローを作成した場合は、設定を変更します。

 1. 左側の[SUPER NETWORK] - [Phone Numbers]を選択
 2. 購入した電話番号を選択
 3. 下記を設定(作成したフロー名がtest8の場合)

4_setting.png

4. 動作確認

購入した電話番号に電話します。以下のようなフローになれば成功です。

 1. 「こんにちは。(こんばんは)」
 2. 「本日の予定を聞く場合は1を、終了する場合は2を押してください。」
 3. 1を押す / 2を押す
 4. 「本日の予定は3件です。
   10時0分から11時0分までアーキテクチャーのレビュー会の予定があります。
   13時0分から13時30分まで都井理央様ご来社の予定があります。
   15時0分から16時0分までGCPオンラインセミナーの予定があります。
   以上となります。」
   / 「終了します。」

雑感

  • Twilio StudioとFaaSの相性はとても良さげ
  • GCP Cloud Functionsでの認証はコーディングが必要のようですが、ここら辺が楽になるといいなあ。(今回は考慮していません。)
  1. ベータ

1
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?