電話が嫌すぎてAWS connect+kinesis+lambda+transcribe+SES+SNSで留守電+文字起こし+メールで通知をするようにした

まとめ

いろいろな事情により、法人をいくつか持っているのですが代表電話への電話が毎日何件かあるもののそのほとんどが営業電話で困っていました。

電話代行サービスを5年ほど使っていたのですが、的を射た営業電話なら良いのですが、その法人の業務内容とは異なった内容の電話も多く、折り返しを希望する、と言われて折り返すたびに営業電話で時間を無駄にしますし、そういったケースで折り返しをしないと何度もかけてきて、電話代行サービスに対して強いクレームを言ったりして、追加料金を取られたりしていました(電話代行サービスでは、謝罪対応すると都度300円など追加料金を取られます)。 営業電話だってわかってたからすぐに折り返ししなかったのにクレームいれるのはやめてほしいです。

緊急の連絡が代表電話に入ることはないですし、電話代行サービスも毎月5000円ほどかかるので、 AWS Connectを使って自動音声フロー+留守番電話+文字起こし+メール通知をするようにしました。

無駄な電話対応をしなくてよくなったので非常に快適です。もっと早くやればよかった。

ただ、残念ながら、留守電まで残して営業をしてくれようとする気合の入った営業電話があまりありません。 メールで伝えたほうがお互いに無駄がなく効率良いと思うんですが不思議です。

商用のサービスもあるので、それをつかっちゃったほうが早いのですが、文字起こしまでやろうとすると月々のコストが電話代行サービスと同じぐらいか、もっと高いんですよね。人の電話代行サービスのほうが安い。

ivry.jp

作り方

【クラウド初心者向け】留守番電話2(Amazon Connect問い合わせフローに留守番電話機能を追加) #AWS - Qiita

に非常に丁寧に書いてあるので、基本的なフローはこの通りです。 Amazon Connectの中で留守電から文字起こしまで全部できそうな感じもするのですが、よくわからなかったので色々組み合わせて作っています。

電話番号は、東京03の番号を取得しています。登記簿謄本出したり身分証を出したり、しばらく時間かかります。

変更しているのは、

  • 音声自動応答のフローの中で、連絡先メールアドレスを知りたい場合にはSMSで通知するようにしていること、
  • AWS transcribeで文字起こしをして、文字起こしした内容をメールで送信するように

作ったもの

勉強がてらPulumniで自動化しようと思っていじっていたのですが、AWS connect周りがPulumniとの相性が悪くて諦めました。

Amazon Connect flow

フローの中で2つLambdaを起動していて、 1. SMSでの連絡先メールアドレス通知 2. Kinesisで録音した情報諸元をS3に保存→こっから先はLambdaのトリガによるピタゴラスイッチ

  • KinesisToWav

KinesisのS3諸元をもとに、WaveファイルしてS3に保存

  • waveToTranscribe

S3に保存されたWaveファイルをTranscribeで文字起こししてSESでメール送信

良いところ

  • 03番号が使える 他のIP電話系の留守電サービスは050の番号になることが多いのですが、03が使えると何となくちゃんとした法人感があってよいです。以前はTwillioも03取れたのですが、取りづらくなってしまったんですよね。

  • Aws transcribeの文字起こし精度が結構良い

留守電を30秒とか聞く必要がなく、ぱっとメールを見れば内容がわかるので便利です。 精度も内容がわかるぐらいにはあるので十分だと思います。

これぐらいの精度です。

{"transcripts":[{"transcript":"お世話になっております。司法書士先生の件ですけれども、こちらで司法書士先生を見つけることができました。固定資産の評価証明の件ですが、四月一日以降入手しましたら司法書士先生に送付をお願いいたします。失礼します"}]
  • 着信が即通知される

着信自体を自分のスマホのSMSに通知するようにすると、ほぼリアルタイムで着信が把握できます。 これは人による電話代行だと、早くても数分は遅れるので地味なメリットですね。

  • 安い

はずだったんですが5000円ぐらいかかってしまいました。Provision kinesisなら2000円ぐらいになるはず。

ハマりどころ

結合テストが面倒

電話のサービスなので、結合テストには電話する必要があります(それはそうだ)。 幸い5分以内の通話無料のプランを使っていたので電話代はいいとして、実際に発信しまくってデバッグするのが面倒でした。

設定でなにかエラーが有ると法人の代表番号が着信するなり「エラーが発生しました」しか言わなくなりますw

Connectのログが追いづらい

Cloudwatchでログが見れるのですが、分かりづらいです。フローのステップごとにエラーが出ているので、一行ずつ追わないといけませんでした。

Connectで録音する対象を、CallerだけにしないとWaveファイルにしたときに倍速になる

Waveファイルの仕様わかってませんが、2chを録音してしまうとWaveファイルにしたときに倍速になってしまってました。原因がわからずハマりました。

Budget超えて代表電話が止まってた

予算設定していると、予算を超えたときに機能が止まってたりました。SNSだけ止まってたことがあって、全く気づきませんでした。

改善ポイント

コスト

Kinesis使ったことがなくて、何も考えずにオンデマンドのほうが安いやろ、とオンデマンドにしてたんですが、月に4000円ぐらいかかってしまっていました。 スループットのあまり必要ない場合はProvisionにしてShard1にしておくのが正解のようです。

メンテナビリティ

AWS Consoleから作りましたが、IaaCしてないのでメンテナンス性がいまいちです。 LambdaのS3系トリガを多様しましたが、どのトリガでどのリソースが作成されるかを意識してないと、ピタゴラスイッチ感があって無限Lambdaしてしまいそうで怖い。

IAM系の設定

ざっくりいろんなリソースへのアクセスを許可しているので、必要な権限、リソースだけに絞らないといけません。

今後の予定

これをCloud formationで電話番号取得からフロー構築まで自動でできるようにして、留守電+文字起こしメール通知ベンチャーで起業します。血の海感ある