MiiTel の文字起こしのデータから Salesforce の各項目に値を自動的に格納する

概要

🚧

Warning!

本ガイドの内容は、ChatGPT の API を利用します。ChatGPT の API は実行量に応じて課金が発生します。

本ガイドでは、MiiTel の文字起こしのデータから ChatGPT の Function Calling を用いて Salesforce などの任意の項目それぞれに適合した情報を自動的に抽出して格納するサンプルを紹介致します。

例を挙げますと、お客様の業務課題をヒアリングした電話の文字起こしから自動的に、「お客様の業務課題」・「利用しているシステム」・「予算」などの Salesforce 側に用意した項目ごとに情報を抽出し格納するということができるようになります。

これにより、架電・受電後に自分で文字起こしを見たり会話を思い出しながら Salesforce などの CRM に入力する手間を省けるので、アフターコールワークを更に削減することが可能となります!

それでは、実装方法を紹介していきますが、まずは全体のシステム像から説明します。

システム構成

今回ご紹介するシステム全体は、下図の様になっています。

インフラストラクチャには AWS を利用しており、 API Server の部分は API Gateway および Lambda で実装しています。

通常のリクエストから処理を行ってレスポンスを返すのみの API であればそれだけで問題はないのですが、今回は ChatGPT により文字起こしから情報を抽出するという処理を行いますので、その場合は API Gateway および Lamdba だとタイムアウトの可能性が発生します。

API Gateway および Lambda の組み合わせは、AWS の制限上 30 秒以内で処理を行う必要があります。ChatGPT の処理は文字起こしの量にもよりますが、 30 秒以内に処理が完了する保証はありません。

そのため、API で MiiTel Outgoing Webhook の処理を受け付けたら、SQS + Lambda の構成に処理を流して、ある程度の処理時間がかかっても大丈夫なようにしています。

ChatGPT の Function Calling

Function Calling について、詳細な説明は公式の説明やその他記事の説明にお任せしますが、概要を記載しますと、ChatGPT のレスポンスをプログラミングで扱いやすい形で返すことができる機能です。

今回では、項目 API 名と項目に対する詳細説明を渡せば、項目 API 名それぞれに対して、詳細説明に沿った内容で文字起こしデータから抽出をしてくれるようになります。

実装方法

それでは、実際の実装方法をご紹介致します。

実装する内容は実装図の通り、AWS 上に API (API Gateray + Lambda) と SQS および ChatGPT と連携するための Lambda です。多少システム構成は複雑となっておりますが、 Serverless Framework で一括でデプロイします。

まずは、データを連携する先のSalesforce側の設定を確認しておきます。

Salesforce 設定の確認

🚧

Notice

今回のガイドにては、リードオブジェクト上にカスタム項目を作成していますが、必要に応じて連携する先のオブジェクトやカスタム項目の内容などはカスタマイズしてください。

Salesforce のオブジェクト管理の画面にて、リードオブジェクトのカスタム項目の設定を確認します。

今回は、NextAction (ネクストアクションの内容)ExpectedValue (お客様がプロダクトに期待している価値や課題のヒアリング結果) の2つの項目を作成しています。

それぞれの項目の API 名は NextAction__cExpectedValue__c となっていることを確認しましょう。

サンプルコードをダウンロードする

それでは、Outgoing Webhook を受信して Salesforce に連携するシステムを構築していきましょう。

今回は、RevComm の GitHub レポジトリに今回の実装のベースとなるコードを公開しておりますので、こちらをベースに構築していきます。以下より、コードをダウンロードしてください。

https://github.com/revcomm/miitel-developers-public/tree/main/samples/ow-custom-field-crm-integration

各種クレデンシャルを設定する

今回 Salesforce と ChatGPT に連携してシステムを構築しますので、それぞれのログイン情報やアクセスキーを設定します。

環境変数ファイル(envsフォルダ内)の以下の部分を編集してください。

  • AWS_ACCOUNT_ID: デプロイする AWS アカウントの ID
  • OPENAI_API_KEY: ChatGPTの API を利用するための API Keyの値
  • SF_USER: Salesforce に API でアクセスするためのユーザーの メールアドレス
  • SF_PASSWORD: Salesforce に API でアクセスするためのユーザーの パスワード
  • SF_DOMAIN: Salesforce インスタンスのドメイン(サンドボックスの場合は test を設定)

serverless 内の設定値を修正する

serverless.ymlを修正して、自分の環境にデプロイできるように修正します。

修正対象

以下の値を修正します。devprodなどの環境名は必要に応じて修正します。

  • domains の値: サブドメインは任意の値を入力する。トップドメインは保有しており、かつ、AWS の Route53 にて利用できるドメインを入力する
  • apiKeysの値: nameに任意の値を入力する。valueには推測されない乱数を入力する

自身の環境にデプロイする

Serverless Framework でインストールします。

パッケージをインストールする

npm install

ドメインを準備する

--stageには、デプロイしたい環境名を指定します。

sls create-cert --stage dev --aws-profile <your-profile-name>
sls create_domain --stage dev --aws-profile <your-profile-name>

デプロイする

--stageには、デプロイしたい環境名を指定します。

sls deploy --stage dev --aws-profile <your-profile-name>

エラーが出た場合は、都度エラー内容を確認してください。

成功したら、次に進みます。

MiiTel Admin で Outgoing Webhook を設定する

作成した API に応対履歴の情報を連携するため、MiiTel Admin で Outgoing Webhook を設定します。

Outgoing Webhook の設定画面を表示する

https://account.miitel.jp/v1/signin にアクセスし、管理者権限があるユーザーで MiiTel Analytics にログインします。

[外部連携] > [Outgoing Webhook] をクリックします。

緑色の [応対履歴連携設定を追加] をクリックします。

応対履歴連携設定を追加する

以下の値を入力します。

  • 名前: 任意の名前を入力する
  • URL: https://<serverless.yml の domains に設定した値>/api/v1/gpt-custom/addを入力する
  • 追加ヘッダー:{"X-API-KEY": "<serverless.yml の apiKeys に設定した値>"}を入力する

正常に保存されると、下図のように Outgoing Webhook の設定が表示されます。

設定は以上です。この設定以降、MiiTel で生成された応対履歴は API に連携されます。

動作検証

実際に架電を行い動作確認をすることも可能ですが、 Outgoing Webhook が送信するリクエストと近いものを API に対して実行することで動作検証を行うことも可能です。

send_api_request.py というスクリプトを用意しているので、こちらの X-API-KEY の値と、リクエスト送信先の API の URL を修正し以下のコマンドより実行してみてください。

python send_api_request.py

うまく動作していれば、下記のようにリードに文字おこしから抽出した情報が連携されています。

お疲れ様でした。本ガイドは以上となります。

いかがでしたでしょうか?本ガイドに沿って実装すると、アフターコールワークをほぼ0になるまで削減する仕組みを構築することも可能となります!是非トライしてみてください。

もし不明点等ございましたら、フォーラムにていつでもご質問ください。