🔰

Claris FileMaker を使った着信処理

はじめに

みなさん、こんにちは。KDDI ウェブコミュニケーションズで CPaaS のエバンジェリストをしている高橋です。
この記事では、Claris FileMaker と Vonage AI Studio を使って、電話の着信をノーコード・ローコードで構築します。

本記事の対象となる読者

  • Vonage を初めて触る方
  • Vonage AI Studio を試してみたい方
  • 電話と Claris FileMaker を連携したいと考えている方

※この記事の内容を実践するにあたり、コーディングスキルは不要です。

Vonage とは

Vonage_logo

Vonage は、米国ニュージャージー州に本社を置くCPaaS(Communication Platform as a Service)企業です。
もともとは VoIP(Voice over IP)企業としてスタートしましたが、いくつかの企業買収を行うことで、コミュニケーションサービス全般をサポートできる企業に発展しました。現在はスウェーデンの大手通信機器会社エリクソンの傘下に入っています。

Vonage AI Studio とは

Vonage AI Studio (以下、AI Studio)は、ノーコード・ローコードでコールフローを構築できるツールです。Vonageが提供しており、ブラウザ上で動作します。

AI Studio

上の図のように、ノードと呼ばれる部品をドラッグ・アンド・ドロップして接続するだけで、簡単にコールフローが作成できます。

Claris FileMaker とは

Claris FileMaker は、Apple の子会社である Claris が提供するデータベース管理ソフトウェアです。ノーコード・ローコードでデータベースアプリケーションを構築でき、iOS、macOS、Windows、Web 上で動作します。業務プロセスの自動化やデータ管理を効率化するための強力なツールです。

用語定義

用語 説明
エージェント AI Studioでフローを作成する最も大きな単位です。エージェント単位で言語や話者、リージョンやタイムゾーンの設定を行います。スタンダードプランでは、最大10個のエージェントが作成できます。
イベント フローが起動するトリガーです。イベントには、Inbound call / Outbound call / End call / API Eventの4つがあります。
ノード フローを構成する各部品のことです。ノードは、Conversation / Advanced / Actions / Integrations / Flow Control の5つのカテゴリーに分類されます。
プロパティ いくつかのノードにはプロパティと呼ばれる要素が含まれます。たとえば、自然言語解析におけるエンティティやインテント、フロー内で共有する変数などがプロパティになります。
Claris FileMaker Server Claris FileMaker で作成されたアプリケーションを複数デバイスで共有したり、共有したデータベースに FileMaker Data API を通じてアクセスできるようにするためのサーバーライセンスです。
FileMaker Data API 共有データベースのデータに Web サービスからアクセスするための API です。API アクセスをするためには、直前に認証トークンを取得する必要があります。

シナリオ

本記事では、以下のシナリオでコールフローを作成していきます。

  1. 電話がかかってきたら、FileMaker Server に対して該当するユーザーが存在するかを確認します。
  2. ユーザーが存在する場合はユーザー名を含む挨拶文を読み上げます。
  3. 具体的な用件を聞きます。
  4. 用件が料金に関するものか、もしくはそれ以外かを判定します。
  5. 料金に関する質問であれば、料金ページの URL を SMS で通知し、担当者にメールを送信します。
  6. それ以外の質問の場合は、担当者の電話番号に転送します。

準備

あらかじめ以下の準備が必要になります。

  • Vonage アカウント(こちらから取得できます)
  • FileMaker のセットアップ
  • FileMaker Server を使った顧客管理アプリ(下記参照)の共有
  • ブラウザ(Chrome推奨)
  • 通話が可能な携帯電話、またはスマートフォン(転送を実施するには電話機が2台必要です)
  • Vonage クーポンコード(電話番号を購入する際に必要です)

FileMaker アプリ

今回は、以下の FileMaker アプリが FileMaker Server 上で動作しているものとします。

FileMaker App

データベースとレイアウトの名前は、共に「Customer」としてください。
また、読み上げを実行するためには、アプリの各フィールドに事前にデータを登録し、FileMaker Data API 経由でアクセスできるようにしておきます。

アプリにはご自分の電話番号を新規レコードとして登録しておいてください。

AI Studioの起動

  • Vonage APIコンソールにログインしてください。
  • 左側からAI Studioを新しいタブで開き、さらに右側に表示されるAI Studioにアクセスするボタンを押します。
    AI Studio 1

エージェントの作成

最初から作成するのは時間がかかるため、今回は途中まで作成済みのエージェントをインポートしていきます。
まず以下のリンクからインポートするファイルをダウンロードしてください。

66b6b9c009422b172282f571.zip

  • Import Agentボタンを押します。
    Import agent click
  • 先ほどダウンロードしたファイルをドラッグ・アンド・ドロップするか、Uploadボタンを押して読み込みます。
    Upload file
  • 右上のImport Agentボタンを押します。
    Import agent
  • インポートが完了すると、一覧に「Claris Incoming Agent」が表示されます。
    Agent imported

パラメータの追加

エージェントのインポートではパラメータはインポートできないので、まずパラメータを追加していきます。

  • 今作成した「Claris Incoming Agent」を選択します。
  • 左側のサイドメニューからPropertiesアイコンを選択します。
  • Parametersを選択します。
    Select parameters
  • Add user parameterをクリックします。
    Add user parameter
  • 以下のパラメータ名をすべて追加します(綴りを間違えないようにコピー&ペーストします)。
パラメータ名 役割
REQUIREMENT 要件を格納します
FILEMAKER_TOKEN API トークンを格納します
CUSTOMER_NAME_KANA 顧客名カナの値を格納します
CUSTOMER_NUMBER 着信番号を 0ABJ 形式で格納します
  • すべてのパラメータを設定したら、Go Backボタンを押します。
    Parameter set

エージェントを完成させる

ではここからは、インポートしたフローを調整してエージェントを完成させていきましょう。

電話番号形式の変換

このフローでは、ユーザーの電話番号形式を MSISDN 形式から、0ABJ 形式に変更します。
具体的には、JavaScript を使って$CALLER_PHONE_NUMBERの先頭2文字を削除し、0に置き換えています。
これによって、たとえば8190XXXXXXXX090XXXXXXXXに変換できます。

  • フローの中の「電話番号形式の変換」を選択します(「Click here to edit」と書かれた場所をクリックするとプロパティウィンドウが開きます)。
    Change flow 1
  • Output Parameter{not found}になっているので、リストから「USER.CUSTOMER_NUMBER」を選択します。
  • Save & Exitボタンを押します。
    Save flow 1

トークンの取得

今回は、FileMaker Server からデータを取得するために、FileMaker Data API を利用します。
FileMaker Data API を使ってデータを取得するためには、取得する API をコールする際にトークンが必要です。
トークン取得のための API は以下のとおりです。

メソッド エンドポイント
POST https://{FileMaker Server ホスト名}/fmi/data/vLatest/databases/{データベース名}/sessions

この API は、ユーザーIDとパスワードによる BASIC 認証が必要です。
そこで、事前に BASIC 認証で使う Base64 で暗号化された文字列を生成します。

以下のサイトを開きます。

  • 画面上部のスペースに、FileMaker Server のユーザーIDとパスワードをコロン「:」でつなげて入力します。

  • 画面下にあるENCODEボタンをクリックします。
    Encoding Base64

  • ボタンの下に生成された文字列が表示されるので、そちらをメモしておきます。

  • AI Studio に戻って、「トークンの取得」フローのプロパティを開きます。

今回修正が必要な場所は3ヶ所です。
Token get parameter

  • Request URLの中のXXXXの部分を、皆さんの FileMaker Server のホスト名に変更します。
  • Headersの中のAuthorizationの値をBasic 先ほどメモしておいた Base64 文字列に置き換えます(先頭のBasicと文字列の間には半角スペースを入れてください)。
  • Response Mappingresponse.tokenの右側にあるParameter$が表示されている部分)をクリックし、「$USER.FILEMAKER_TOKEN」を選択してください。
    Set token parameters
  • Save & Exitボタンを押します。

顧客名を取得する

トークンが取得できたので、取得したトークンを使って、FileMaker Server から顧客名カナ(CustomerName_Kana)フィールドの値を取得しましょう。
フィールドの値を取得する API は以下のとおりです。

メソッド エンドポイント
POST https://{FileMaker Server ホスト名}/fmi/data/vLatest/databases/{データベース名}/layouts/{レイアウト名}/_find

この API では、トークンを用いた Bearer 認証が必要になります。

また、ボディとして以下のような JSON を指定する必要があります。

{
    "query": [
        {
            "{フィールド名}": "{検索したい値}"
        }
    ]
}
  • 「顧客名の取得」フローのプロパティを開きます。
  • Request URLの中のXXXXの部分を、皆さんの FileMaker Server のホスト名に変更します。
  • Headersの中のAuthorizationのバリューをBearer $USER.FILEMAKER_TOKENに置き換えます。
    Set get customer parameter 1
  • Bodyタブに移動します。
  • クエリ JSON の中のパラメータを$USER.CUSTOMER_NUMBERに置き換えます。
    Set query parameter
  • Headersタブに戻ります。
  • Response Mappingresponse.data[0].fieldData.CustomerName_Kanaの右側にあるParameter$が表示されている部分)をクリックし、「$USER.CUSTOMER_NAME_KANA」を選択してください。
    Set token parameters
  • Save & Exitボタンを押します。

顧客名ありガイダンス

顧客名が取得できた場合は顧客名と挨拶を合成音声で再生します。
合成音声を発話させるためには、Speakノードを利用します。

  • 「顧客名ありガイダンス」フローのプロパティを開きます。
  • $<not_found>の部分を$USER.CUSTOMER_NAME_KANAに置き換えます。
  • Save & Exitボタンをクリックします。
    Guidance with name

要件を聞く

フローの途中でユーザーに対して質問を行い、音声や DTMF で応答を受け付けるにはCollect Inputノードを利用します。

  • 「用件を聞く」フローのプロパティを開きます。
  • Parameterのリストから「USER.REQUIREMENT」を選択します。
  • Promptsフィールドには質問文を指定できます。今回は「用件を具体的にお話しください。」と入力してあります。
  • Number of Retriesに、「3」を指定します。これにより再試行を3回行います。3回試しても入力がない場合は、No inputとして処理されます。
  • Retry Promptsには、「すみませんが、うまく聞き取れませんでした。用件を具体的にお話しください。」と入力してあります。
  • Save & Exitボタンをクリックして、設定内容を保存してください。
    Set parameters in CollectInput node

電話番号の購入

ここからの手順を行うために、電話番号を購入します。電話番号を購入するためには、以下のいずれかの条件を満たす必要があります。

  • アカウントをアップグレードしている
  • クーポンコードを適用している
  • Vonage ダッシュボードに移動します(AI Studioではありません)。
  • 左側の番号メニューを展開し、番号を購入を選択します。
    Buy a number
  • のリストから「United States(+1)」を選択します。
  • 機能のリストを開き、「SMS」と「Voice」をチェックします。
  • Searchボタンをクリックすると、購入できるリストが一覧表示されます。
  • 購入したい番号をリストから選択し、購入ボタンをクリックします。
    Phone number 2

Phone number 3

  • 確認ウィンドウが開くので、購入ボタンをクリックします。
  • 画面上部に購入完了のメッセージが表示されれば、無事に番号が購入できています。

電話番号をAI Studioに紐付ける

では次に、今購入した電話番号を現在作成中のエージェントに紐付けます。

  • AI Studioのコンソールに入ります。
  • 左上の電話アイコンを押して、Phone Settingsを選択します。
    Phone Settings
  • Assign Phone Numberボタンをクリックすると、保有している電話番号のポップアップウィンドウが開きます。
  • 先ほど購入した番号をリストから選択します。
  • Assign Numberボタンを押します。
    Assign Number
  • 電話番号が紐付けられたことを確認します。
  • Closeボタンをクリックしてウィンドウを閉じます。
    Confirm assign number

中間テスト①

ではここまでの状態で一度テストをしてみます。
お使いの電話番号がすでに FileMaker 側に登録されていることを確認してください。

AI Studio でテストするにあたり、チャットか電話を使うことができます。
今回は皆さんの電話機を使ってテストします。

  • 右上のTesterボタンを押します。
    Click Tester
  • Start phone Callボタンをクリックします。
    Click Start phone Call
  • Your phone numberの国コードから日本(+81)を選択します。
  • その右側にご自分の電話番号を入力します(先頭の0は削除してください)。
  • Callボタンを押します。
    Test call

電話がかかってきて、ご自分の名前を読み上げてくれれば成功です。

続けてエージェントを完成させる

ここまでの動作が確認できたら、シナリオの残りの部分を作成しましょう。

用件を精査する

ユーザーが問い合わせた内容を精査して、料金に関するものとそれ以外をフィルタリングする処理を作成します。
ユーザーが発話する内容を精査するために、NLU(Natural Language Understanding: 自然言語理解)を使用します。
Vonage AI Studioには、NLUを行うための仕組みが標準で用意されています。まずはその準備を行いましょう。

NLUで使われる用語の整理

用語 説明
Classification NLUを実行するためのノードです。実行時に、以下のEntitiesやIntentを利用します。
インテント(Intent) NLUで学習をするための基礎データです。たとえば請求書に関する問い合わせのサンプルデータとして「請求書について確認したい」とか、「請求書が届いていない」、「請求書の宛先を変更したい」などを基礎データとして登録します。これにより、サンプルに近い言い回し(例:「請求書の明細金額を確認したい」でも請求書に関する問い合わせであることを認識します。
エンティティ(Entities) エンティティを使うことで、インテントの一部をさらに細かく指定できます。たとえば、「請求書について確認したい」というインテントの「請求書」のところをエンティティとして登録しておくことで、ここが異なる発話(例:「支払期日を確認したい」)になった場合に、エンティティで切り分けを行うことができます。

インテントを確認する

今回は、料金に関する問い合わせに絞りますので、インテントは1種類あれば大丈夫です。もし質問を複数カテゴライズしたい場合はインテントも複数作成しましょう。

  • 左側のPROPERTIESメニューからIntentsを選択します。
  • Intentsウィンドウが開きます。
  • すでに「料金」という名前をつけたインテントがあるので、それを選択します。
    Intent list
  • 登録済みのインテントを確認します。今回は料金に関する問い合わせでありそうな質問をすでにいくつか登録しています。
  • Go Backボタンをクリックします。
    Check Intents
  • Closeボタンをクリックします。

Classificationノードを追加する

  • 左側のNODESメニューからClassificationノードをドラッグ・アンド・ドロップします。
    Drag Classification node

  • ドラッグしたノードをクリックしてプロパティウィンドウを開きます。

  • ウィンドウ上部に「用件による分岐」と入力し、ノードに名前をつけます。

  • Classification Parameterのプルダウンリストから、NLUの対象となる文章が格納されている「USER.REQUIREMENT」を選択します。

  • Intentsフィールドには、「料金」インテントを選択します。

  • Save & Exitボタンをクリックします。
    Set parameter in Classification

  • 今作成したノードと用件を聞くノードを線でつなぎます。
    Connect node

料金の問い合わせに回答する

  • Speakノードをひとつ追加します。

  • プロパティウィンドウを開きます。

  • ノードのタイトルに「料金に関する回答」と入力します。

  • Agent saysに「料金へのお問い合わせですね。料金ページのリンクをSMSで送信しますので、お手数ですがそちらをご確認ください。」と入力します。

  • Save & Exitボタンをクリックします。
    Guidance of Pricing

  • 「要件による分岐」フローと「料金に関する回答」を接続します。
    Connect Nodes

SMSを送信

料金ページのURLをSMSで送信します。

  • 左側のNODESからSend SMSノードをドラッグ・アンド・ドロップします。
  • プロパティウィンドウを開きます。
  • ノードのタイトルに「SMSを送信」と入力します。
  • From欄には、「HANDSON」と入力します。
  • To欄では、まず「$」を入力し、表示されるリストから「$CALLER_PHONE_NUMBER」を選択します。
  • Body欄には、「料金は以下のページにて公開しております。https://www.claris.com/ja/pricing/」と入力します。※URLは何でもOKです。
  • Save & Exitボタンをクリックして保存します。
    Set SMS parameters
  • 「料金に関する回答」ノードと今作成したノードを繋いでおきます。

担当者のメールアドレスを登録

着信があったことと SMS を送信したことを担当者にメールで伝えるために、事前に担当者のメールアドレスを登録しておきます。

  • 左側のPROPERTIESからContactsメニューを選択します。
  • Create Contactボタンをクリックします。
    Open contact
  • ノード名にメールを送信したい担当者名を入力します。
  • Phone Numberに、担当者の電話番号を入力します(E.164 形式)。
  • Email欄に、担当者のメールアドレスを入力します。
  • Save & Exitボタンを押します。
    Set contact

料金の問い合わせがあった旨を担当者にメールする

  • 左側のNODESメニューからSend Emailノードをドラッグ・アンド・ドロップします。
  • ドロップしたノードのプロパティウィンドウを開きます。
  • ウィンドウ上部に「メール送信」と入力し、ノードに名前をつけます。
  • To欄で「@」を入力すると、先ほど登録したContactがリスト表示されるので、そちらを選択します。
  • Subject欄には、「料金に関するお問い合わせがありました」と入力します。
  • Body欄には、以下の内容を入力します。$USER.CUSTOMER_NUMBER$USER.REQUIREMENTの部分については、「$」を押すことで選択が可能です。
今しがた、以下のお問い合わせがありました。
お客様電話番号:$USER.CUSTOMER_NUMBER
---
$USER.REQUIREMENT
---
料金ページのURLをSMSで送信しました。
引き続きのご対応をお願い致します。

Set send mail properties

  • Save & Exitボタンをクリックして保存します。
  • 「SMSを送信」ノードと「メール送信」ノードを接続しておきます。
  • さらに、「メール送信」ノードと「通話の切断」ノードを接続しておきます。

中間テスト②

ではここまでの状態をテストしてみましょう。
先ほどと同じように、画面上部のTesterボタンからテストします。
要件の質問に対して、何か料金に関する問い合わせ内容を話すことで、料金ページの URL が正しく SMS で送信されることを確認します。

エージェントを最後まで完成させる

ではいよいよシナリオの最後の部分の料金以外の問い合わせだった場合の処理を作成します。

転送ガイダンスの作成

まず担当者に転送する旨を伝えます。

  • Speakノードを追加します。

  • プロパティウィンドウを開きます。

  • ノードのタイトルに「転送ガイダンス」と入力します。

  • Agent saysに「担当者におつなぎしますので、このまましばらくお待ち下さい。」と入力します。

  • Save & Exitボタンをクリックします。
    Guidance for transfer

  • 「要件による分岐」フローのMissedと、今作成したノードを接続します。

担当者に電話を転送する

AI Studio には転送用のノードは用意されていないため、NCCO を使って転送を実装します。

  • NCCOノードをドラッグ・アンド・ドロップします。
  • プロパティウィンドウを開きます。
  • ノードのタイトルに「担当者に転送」と入力します。
  • Bodyに以下の JSON を入力します。電話番号の部分には、ご自分の電話番号(テストに使っているものとは別の番号)を入力します。
{
  "action": "connect",
  "from": "$AGENT_PHONE_NUMBER",
  "endpoint": [{
    "type": "phone",
    "number": "819012345678" 
  }]
}

Set NCCO node

  • 「転送ガイダンス」ノードと今作成したノードを繋ぎます。

総合テスト

以上でエージェントは完成しました。テストを行い、想像どおりの動作になることを確認してください。

Test

パブリッシュ

テストがうまく動作したら、いよいよ本番環境にデプロイします。

  • 画面右上のPublishボタンをクリックします。
    Click Publish
  • Description欄に説明を書いて、Publishボタンをクリックします。
  • パブリッシュが完了した画面が表示されれば、このフローは無事に公開されています。
    Publish

後片付け

今回作成したフローは実行しない限り料金は発生しませんが、電話番号については毎月課金の対象となります。
課金を防ぐためにはハンズオンが終了した時点で電話番号の削除をしておくことをおすすめします。

  • Vonage APIコンソールにログインします。
  • 左側の番号メニューからあなたの番号を選択します。
  • 一覧表示される番号の中から、削除したい番号の右側にあるゴミ箱アイコンをクリックします。
  • Deleteボタンをクリックすると番号が削除されます。

まとめ

今回は、ノーコードで Claris FileMaker と連携した電話の一次応対フローを構築しました。
AI Studioがあれば、エンジニアでなくてもコールフローが構築できることをおわかりいただけたかと思います。
今回利用した機能以外にも、AI Studioには多くの機能が用意されているので、ぜひいろいろとチャレンジしてみてください。

最後にAI Studioの料金についても説明をします。料金ページはこちらです。

Pricing

スタンダードプランは無料で利用可能ですが、月に10,000セッション(フローの実行)までという制限があります。また、スタンダードプランでも一部の機能はオプション料金が必要になります。

通話料については、以下のサイトをご覧ください(KWC価格)。

KWCPLUS

Discussion