はじめに
LINEWORKSとZeenyを使って音声メッセージのやりとりができる機能を開発しました。
今回はうまくやりとりができない問題が発生してしまったので紹介します。
Zeenyって何?
Zeeny[ジーニー]は、人々をスクリーンから解放する株式会社ネインによって運営されている、ヒアラブルデバイスを中心とした、ウェアラブルプロダクトブランドです。
ZeenyヒアラブルデバイスとZeenyAppによって、スマートフォンの受け取るあらゆる通知を音声で伝えます。
LINEWORKSとの連携
連携については前回の投稿で。
LINEWORKSと連携して音声メッセージのやりとりをする - Qiita
メールやLINEなど通常メッセージの読み上げにはTTSを使用していますが、こちらは投稿された音声をそのまま通知に利用します。
Zeenyデバイスのボタン操作で音声が録音され、その音声をサーバーに送信。サーバー側は音声をテキスト化し、LINEWORKSにそのテキストを投稿します。受け取る側のZeenyはLINEWORKSからの通知を受け取り、投稿された音声を再生します。
デスクトップAppやWebからも確認できるようにボイス再生ボタンを用意しています。
ボイスメッセージよりも少しだけ良いユーザー体験を提供します。
問題発生
音声再生の仕組みとしては、サーバーがメッセージ投稿と同時にFirebase Cloud Messaging(FCM)で音声の保存場所をZeenyに伝えます。受け取ったZeenyはその音声を取得して再生します。
バックグラウンドでこの音声のやりとりを続けると、受け取れないメッセージが多発してしまうという問題が発生しました。
バックグラウンドで受け取れる回数に制限がある!
Pushing Background Updates to Your App
Important
The system treats background notifications as low priority: you can use them to refresh your app’s content, but the system doesn’t guarantee their delivery. In addition, the system may throttle the delivery of background notifications if the total number becomes excessive. The number of background notifications allowed by the system depends on current conditions, but don’t try to send more than two or three per hour.
できるだけリアルタイムに会話のキャッチボールをしたい本サービスで回数制限は大問題です。
泣く泣くLINEWORKSへの投稿に音声URLを埋め込む形に修正。メッセージを受けた際にそのURLにアクセスすることで、制限なく音声を再生することができるようになりました!(通知の受け取りは、Zeeny独自の仕様で実現しています!)
URLが長すぎ問題
URLをそのまま投稿するとかなり長くなって肝心のメッセージがとても見づらくなってしまいました。
これを解決するために、Firebase Dynamic LinksのURL短縮機能を利用して1行に収まるようにしました。この手法についてはたくさん記事があると思いますので割愛します。
最終的な完成形はこちら。
それでも視認性はあまり良くないので改善したい。。
実はこれ以外に、iOS12.4からバックグラウンドで音声を録音できないという問題も発生したのですが、こちらについてはまたの機会に。
まとめ
業務用サービスとして展開している本サービス、介護士の方が手にボールペンで書くメモ、営業さんが商談した際に残したいちょっとした自分用のメモ、そんなことを音声で解決する様な用途にも最近お声がけいただくことが増えてきました。
リモートワークが増えた現在、テキストだけのやりとりではなかなかうまく伝わらない問題を、少しでも改善する一助となればと願い、これからも開発を続けていきたいと思います。