Speee DEVELOPER BLOG

Speee開発陣による技術情報発信ブログです。 メディア開発・運用、スマートフォンアプリ開発、Webマーケティング、アドテクなどで培った技術ノウハウを発信していきます!

Amazon Connectで、自社APIのデータを使って受電先を自動で変更する

2019年11月に、リフォームのマッチングプラットフォーム「ヌリカエ」の開発チームにjoinした竹井です。
3月にAmazon Connect上でプレディクティブコールっぽいものを実現してみた - Speee DEVELOPER BLOGという記事を書きました!

今回もまたAmazon Connectのお話ができればと思います。

自社APIのデータを使って受電先を自動で変更するとは?

具体的に、今回のタイトルにもなっている「自社APIのデータを使って、受電先を自動で変更する」とは……。

多くの場合、受電対応チームは1チームかもしれません。
ですが、例えば弊社では新規入社者の育成スピード改善のため、新規入社者は一旦○○な電話を対応してもらって、それ以外のものは既存チームで受電対応をする。ということを行おうと思っていました。
他にも、例えば新規で電話をしてきた方なのか。今までに対応をしたことのある方なのか。などでも受電先を変更したい要望があったりするかもしれません。

簡単に言うと、こういった要望を叶えられるようになる! ……と言うことになります。

作成前に注意

作成前にいくつか注意点が御座います。

今回は受電先を分けるための変数を自社データとして既に持っていて、APIとしてAmazon Connectから読み込んでも良い情報であることが条件になります。

例えば、弊社の例で言った「○○な電話」を判定している部分が、既にDBなどに記録している必要が出てきます。
既にある hoge_status1 のものは新規入社者へ。 hoge_status0 のものは既存チームへ。と分けられることが前提です。

もしもデータを取っていない場合は、今回紹介する方法ではなく、IVRを導入することでお客様に変数を選んでもらうこともできます。
IVRとは、いわゆる電話に出たら自動音声で「○○のサービスについては1を。○○についての質問がある方は2を」みたく言われて、こちらが番号を押すことで担当先が変わる。みたいなものです。

が、今回はそういった操作をお客様に求めず、既にデータがあるのでそれを使って受電先変えよう! というのが目標になります。

また、API通信をする関係上、お客様がコーラーに繋るまでの時間は、APIの通信速度によって伸びてしまいます。
弊社ではこのリードタイムによる影響はないと考えましたが、こちらは本番環境に導入する前にチェックをするようにして下さい。

作成方法

では、お次は作成方法をご紹介いたします!

今回はAmazon Connectだけではなく、AWS Lambdaを使う必要があります。
また、システム側には、AWS Lambdaから叩けるAPIを用意してあげる必要があります。

まずは、APIの部分の作り方です。
弊社ではRailsを使っているため例としてRailsで記述していますが、APIの方はjson形式で返してあげれば別に言語は何でも大丈夫かと思います。

def fuga
  # 持って来たいhoge_statusを取得する処理
  fuga = Fuga.find_by(telephone_number: params[:tel])

  # json形式で返してあげればOK
  render json: { hoge_status: fuga.hoge_status }
end


こんな感じです。
めっちゃ雑ですが、検索で使う電話番号 (今回は tel の部分) などを params で受け取って、検索。
hoge_status を返してあげるシンプルな処理です。
↑のように今回は電話番号で案件を検索する想定でサンプルコードは進めます。次のLambdaも然り。です。

お次はLambdaの作成です。
AWSのサービスからLambdaを選択して、「関数の作成」をクリックします。

それぞれよしなに決めて頂いて……。

ランタイムの部分だけ、弊社ではRailsを使っていてRubyの方が書きやすいのでRuby 2.7を選択しています。
サンプルコードもRubyのものを載せるので、ここが異ると今回のサンプルコードは参考にできな……いかもしれません。

で、作成したらLambdaのコードを記述します。サンプルなので適宜変更は必要ですが、概ねこう。

require 'net/http'
require 'uri'

def lambda_handler(event:, context:)
  # ここは必要なものを調べて持ってくる。今回は電話番号が欲しいのでこのカタチ
  tel = event['Details']['ContactData']['CustomerEndpoint']['Address']
  params = { tel: tel }

  # ここに↑で作ったAPIのURLを!
  uri = URI.parse('http://example.com')
  uri.query = URI.encode_www_form(params)

  # ここいらは認証設定などによってどうしても若干記述が異なる箇所
  # 適宜変更してAPIを叩く処理を!
  result = Net::HTTP.get(uri)

  JSON.parse(result.body)
end


お次はAmazon Connect側の問い合わせフローの作成。

最小構成だと、こうなると思います。
大事なのは、「AWS Lambda関数を呼び出す」の箇所と、「コンタクト属性を確認する」です。

「AWS Lambda関数を呼び出す」は、そのまま↑で作ったLambdaを叩く処理。説明不要かと。
「コンタクト属性を確認する」で、APIで返したjsonの値を読み取って、結果によってキューを変更する。となります。

「コンタクト属性を確認する」の中身はこんな風に設定をします。

「タイプ」は「外部」。「属性」は使いたい status
今回はAPI側で

render json: { hoge_status: fuga.hoge_status }


としましたが、例えば

render json: {
  hoge_status: fuga.hoge_status,
  piyo_status: fuga.piyo_status,
}


としていれば、

それぞれの status を組み合わせて、3つのキューに振り分ける。なんてことも可能になります。
また、2つ目では =0=1 で分けていますが、ここは 以上以下 など様々な条件を入れられます。

作成方法としては、以上です!!

弊社ではこちらの新しいAPIによる自動受電振り分けによって新規入社者にも一部の架電を担当させた結果、定量的には平均接客数を130%まで増やすことに成功し、同時に育成スピードへの転化も実現することができました! 🎉

最後に

Speeeでは一緒にサービス開発を推進してくれる仲間を大募集しています! もしSpeeeに興味を持っていただいた方は以下で社内メンバーのカジュアル面談を公開しているので、お気軽にご連絡ください💁

tech.speee.jp

Speeeでは様々なポジションで募集中なので、「どんなポジションがあるの?」と気になってくれてた方は、こちらチェックしてみてください!もちろんオープンポジション的に上記に限らず積極採用中です!!!