catch-img

Amazon Connectで毎日1時間の業務を自動化し削減しました

先日、Amazon ConnectとAWSのいくつかのサービスを使用して、毎日1時間発生していた業務を自動化して削減しました。
リリースにあたって、部門同士のAPI連携がうまくいったことと、ボトムアップとトップダウンがうまく作用したことも含めて記載します。

 

何をやったか ~日直業務の自動化~

dayduty_022_1

トレノケートでは、講師が現場に到着した際に、自動応答電話もしくはMy Trainocate Portalというポータルサイトから到着報告をします。
到着報告はMy Trainocate Portalの到着連絡表に到着済としてマークされます。
コース開始30分前までに到着報告がない講師をピックアップして、マネージャーに報告する業務が日直です。
日直は全社員が日替わりで交代して担当していました。
ほとんどの場合、現場に到着していないのではなく、到着報告を忘れているだけでした。

dayduty_022_2

この日直の業務と講師に電話をかける業務をAmazon Connectで自動化することにより、日直業務を廃止しました。

My Trainocate Portalとは

トレノケートのIT部門が内製開発している、受講者様と講師や社内のサポート部門が使用するポータルサイトです。
社内SNSで発信された改善要望などフィードバックに基づき、日々迅速に機能追加が行われています。

 

どうやったか ~Amazon Connect~

dayduty_022_3

My Trainocate Portalから送信されたPOSTリクエストを受けて、講師に電話をかけるAPIを開発してリリースしました。
API側の開発担当は私1名です。

 

電話をかける処理

dayduty_022_4

My Trainocate Portalから送信されたPOSTリクエストを受けて、講師に電話をかけます。
該当講師の電話番号はMy Trainocate Portalからパラメータとして送信されるので、API側ではマスタを持ちません。

dayduty_022_5

これはサンプルイメージですが、このようなフローをAmazon Connectで作成しています。

Lambda関数はPython boto3でstart_outbound_voice_contactを実行してフローに電話番号や再生テキストを渡しています。


import jsonimport boto3
def lambda_handler
(event, context):    connect_client = boto3.client('connect')    response = connect_client.start_outbound_voice_contact(        DestinationPhoneNumber='+818000000000',        ContactFlowId='xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx',        InstanceId='xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxx',        SourcePhoneNumber='+815000000000',        Attributes={            'ReminderText': 'これはテストのリマインダーです'        }    )    return {        'statusCode': 200,        'body': json.dumps(response)    }

APIへPOSTされたリクエストのレスポンスでは、ContactIdを返しています。

 

電話に折り返した際に転送する処理

 

dayduty_022_8

自動で講師に電話した際に出られず、気づいてすぐに折り返すケースもあります。
その場合は、従来からある到着報告自動応答番号へ転送しています。

dayduty_022_11

Amazon Connectの着信フローに転送を設定しました。

 

電話に出たかどうかを確認可能に

 

dayduty_022_8

Amazon Connectでは問い合わせ追跡レコードをKinesis Data StreamsかKinesis Data Firehoseへストリーミングできます。
発信した電話に講師が出た場合、問い合わせ追跡レコードのConnectedToSystemTimestamp属性に時間が設定されます。
出なかった場合はnullのままです。
Kinesis Data StreamsにストリーミングしてコンシューマーのLambda関数からこの情報をDynamoDBテーブルに書き込んでいます。
ContactIdがパーティションキーです。

そして別のAPI にMy Trainocate PortalからパラメータにContactIdを設定したGETリクエストがあった際に、その電話に出たか出なかったかを返しています。

 

IT部門との連携 ~マイクロサービス~

dayduty_022_9

My Trainocate Portalの開発はIT部門による内製開発です。
まずこのアイデアができたときに、IT部門担当者とホワイトボードを囲んで1時間ほど打合せをしました。
これでお互いがやることが決まりました。
あとは、それぞれが必要な開発を非同期に行いました。

私は講師をやりながらなので、隙間時間で開発を進めました。
開発が完了しそれぞれのテストも完了したので、リリースして並行運用を開始しました。

お互いが開発したサービスをAPIで接続します。
それぞれが担当している中身はお互いが口を出したり、内容を確認したりすることはなく、リクエストとレスポンスだけを共有します。
非同期的に開発できたことで、余分なコミュニケーションを減らすことができ、迅速な開発ができました。

迅速なリリース ~ボトムアップとトップダウン~

 

dayduty_022_10

並行運用を開始して1ヶ月経たないうちに、本部長から全社へ一斉メールが送信されて、日直業務は廃止されました。
アイデアや開発はボトムアップで行って、運用変更はトップダウンで一気にリリースしてしまう。
良い関係だと思います。
リリースや運用に乗せるまでをボトムアップでやってたらこんなにスムーズには進まないところでした。

リリースから数ヶ月が経ちましたが、何の問題もなく運用されています。
現場や部門や担当者が課題を抽出して解決することで、正しく早い解決ができる、そしてそれを決裁者が責任をもって適用していく、そんな世界が垣間見えた体験でした。

 

トレノケートのAWS研修(AWS認定トレーニング)

トレノケートのAWS認定トレーニングでは、AWS社の厳格なテクニカルスキル及びティーチングスキルチェックに合格した認定トレーナーがコースを担当します。AWS初心者向けの研修や、AWS認定資格を目指す人向けの研修をご提供し、皆様のAWS知識修得のサポートをいたします。
トレノケートのAWS研修(AWS認定トレーニング)はこちら


▼AWS初心者の方は、 AWS Cloud Practitioner Essentialsから!
座学中心の研修で、AWSを初めて学ぶ方や、営業などで提案に関わる方におすすめです。
「AWS Certified Cloud Practitioner」資格取得を目指す方の基礎知識修得にも最適です。
AWS Cloud Practitioner Essentials 詳細・日程はこちらから

山下 光洋(やました みつひろ)

トレノケート株式会社 講師。AWS Authorized Instructor Champion / AWS認定インストラクター(AAI) / AWS 認定ソリューションアーキテクト - プロフェッショナル /AWS認定DevOpsエンジニア - プロフェッショナル / AWS 認定デベロッパー - アソシエイト / AWS 認定 SysOps アドミニストレーター - アソシエイト / AWS 認定クラウドプラクティショナー / kintone認定 カスタマイズスペシャリスト他。AWS認定インストラクターとしてAWS認定コースを実施。毎年1,500名以上に受講いただいている。AWS 認定インストラクターアワード2018, 2019を日本で唯一受賞。著書『AWSではじめるLinux入門ガイド』(マイナビ出版社)。共著書『AWS認定試験対策 AWS クラウドプラクティショナー』(SBクリエイティブ社)。前職では2016年にAWS Summitにパネラーとして参加。その前はLotus Technical Award 2009 for Best Architectとして表彰されている。また、各コミュニティの運営にも個人的に関わり、勉強会にてスピーカーや参加をしている。