Gadgets技術ネタ

TaskerでAndroidなんでも自動化企画!【通話履歴の保存編】

Gadgets
スポンサーリンク

どんな記事?

AndroidアプリのTaskerを使って、LINEや電話などの通話履歴をGoogleカレンダーやDiscordに自動的に記録する方法をまとめました。通知を検出して自動化するため、楽天Linkや他のアプリにも応用ができ、いろいろなアプリの通話履歴を一元管理して振り返ることができます。

背景

僕は自他共に認めるライフログ魔です。

カレンダーや写真はもちろん、ツイートやいただいたリプライ、日々の移動軌跡、運動やアクティビティなどおおよそすべての行動をデジタル化して残しています。

ですが通話履歴に関してはそれほど今まで記録を残しておらず、今iPhoneを使っているのですがPixel 6が出たらAndroidに戻ろうかなとも思っていたので、いい機会なのでいろいろ自動化して記録を楽にしようと思い仕組みを作ってみました。

使うアプリ

Tasker

今回の要となる自動化アプリケーション。有料ですが非常に多岐にわたるタスクを自動化することができるので、入れておいて損はありません。

Notification Listener

TaskerでAndroidの通知を読み取りタスクの起点にしたり、通知を作成できるプラグイン。

CalendarTask

TaskerからGoogleカレンダーに簡単に予定を追加することができるプラグイン。

RESTask for Tasker

TaskerからHTTPリクエストを作成できるプラグイン。DiscordのWebhookを叩くために使用します。

Past Notifications

必須ではありませんが、通知を記録してあとから確認することができるので、タスクを作成する際に便利です。

インストールと権限の設定

Taskerやプラグインは通知やデバイスの様々な情報にアクセスするため、権限の適切な設定が必要です。またバックグラウンドで実行するため、バッテリーの最適化から除外することも忘れてはいけません。今回はカレンダーや通話履歴、通知へのアクセスを設定しておきましょう。

カレンダー、通話履歴、電池の最適化から除外

設定アプリ → アプリと通知 → アプリをすべて表示

Tasker, Notification Listener, CalendarTask, RESTask for Tasker のそれぞれを許可

通知へのアクセス許可

設定アプリ → アプリと通知 → 特別なアプリアクセス → 通知へのアクセス

Taskerのプロファイル、タスクの作成

以下ではLINEの音声通話を例にプロファイルとタスクの作成をしています。電話や他に通話できるアプリでも、通話中に通知が出るものだったらコンテキスト(タスクの実行条件)とすることができます。

変数の設定

タスクで使用する変数を設定することができます。DiscordのWebhook URLなど、複数箇所で使用するものは変数にあらかじめ登録しておくと便利です。

発着信の判定とタスク実行

プロファイルの作成

発信中や着信中の通知を検出し、架電したのか受電したのか判定してからフラグを設定します。これによりどちらから通話を開始したのかも記録可能になります。
アプリケーションをLINEに指定して、さらに対象となる通知を通話関係に絞り込みます。また%isTalkフラグですでに通話中かどうかを判定しています。

このプロファイルはLINE通話の例ですが、各アプリにより判定に使う通知の文字列が異なりますので適時変更してください。

タスクの作成(発着信のフラグ設定)

タスクの流れ
  1. 通知テキストに「着信中」の文字列が含まれていたら
  2. %callFlagに「着信」を設定
  3. それ以外(架電)の場合
  4. %callFlagに「発信」を設定

通知のメッセージを見て判定しています。%callFlagという変数に「着信」「発信」という文字列を設定しています。この変数はのちほど使用します。

通話開始の判定とタスク実行

プロファイルの作成

発着信の検出と同じように設定し、対象となる通知文字列を設定します。ビデオ通話も検出可能にする場合は変更してください。

タスクの作成(通話開始時刻や時間を記録しDiscordなどに通知)

タスクの流れ
  1. %appNameに通知を発生させたアプリ名を設定
  2. %WhomToCallに通話相手の名前を設定
  3. %mesageTitleに通知のタイトルを設定
  4. %messageBodyに通知のテキストを設定
  5. シェルで指定フォーマットで日時を取得して%timestampに設定
  6. %endTimeに通話開始時刻をUNIX時間で設定
  7. %isTalkを1に設定し、通話中のフラグを設定
  8. RESTaskでDiscordに通知

通話開始時刻を分かりやすいフォーマットで通知/記録するために date "+%Y-%m-%dT%H:%M:%S" をシェルで実行し、結果を %timestamp に格納します。また通話開始したら%isTalkフラグを立てます。

現在日時を指定フォーマットで取得
date "+%Y-%m-%d %H:%M:%S"
Discordに通知

RESTaskの設定です。Hostの%CallLogUrlには通話履歴記録用のDiscord Webhook URLを設定しています。

Prametersにはこのような設定をします。DiscordのWebhookに登録するJSONフォーマットを参考にしてください。

usernameにはアプリ名を、avatar_urlにはアプリのアイコンを、contentには本文を設定します。上の画像例ではavatar_urlに自分の所有しているサーバにあらかじめアップロードしてあるアイコンのパスを指定しています。

またcontentでは文字装飾を行うこともできますので、通話相手を太字にしています。

**%messageTitle**
%callFlag : %timestamp

終話の判定とタスク実行

プロファイルの作成

ここでポイントは「通話中」の通知が「Removed」されたのをトリガーとすることです。これにより終話の判定をすることができます。

また%isTalkで通話中の場合のみ発動するように設定します。

タスクの作成(終話時刻や通話時間などをカレンダーやDiscordに記録)

タスクの流れ
  1. %isTalkを0に設定し、通話中のフラグを解除
  2. %appNameに通知を発生させたアプリ名を設定
  3. %mesageTitleに通知のタイトルを設定
  4. %messageBodyに通知のテキストを設定
  5. シェルで指定フォーマットで日時を取得して%timestampに設定
  6. %endTimeに終話時刻をUNIX時間で設定
  7. デバッグ用ポップアップ(コメントアウトしてます)
  8. CalendarTaskでGoogleカレンダーに通話履歴を登録
  9. 通話時間(秒)を計算し%talkTimeSecondに設定
  10. シェルで通話時間(秒)をHH:MM:SSに変換して%talkTimeに設定
  11. RESTaskでDiscordに通知
Googleカレンダーに登録

登録するカレンダーやタイトル、開始と終了時刻などを設定することができます。Googleカレンダーでは開始終了時刻に秒は反映されません。また位置情報なども記録することで、どこで通話したかを振り返ることができます。

通話時間を秒からHH:MM:SS形式に変換
Discordに通知
終話 : %timestamp
時間 : %talkTime

実行結果

Googleカレンダーへの登録結果

通話開始と通話終了の時刻枠で予定が作成されます。

Discordへの通知結果

アドレス帳に登録があれば名前が、なければ電話番号が記録されます。

LINEはユーザ名が記録されます。

Elementも同様です。

まとめ

いかがでしたか? 通話履歴を自動記録して僕と一緒に立派なライフロガーを目指しましょう!

Taskerを使えば様々なタスクを自動化することができます。複数のスマホを所有している場合は通知を集約することもできますし、バッテリーの残量が低下したらDiscordに通知させることも簡単にできます。

便利なプロファイルはたくさんありますので、今後も機会があれば紹介していく予定です。

参考サイト

タイトルとURLをコピーしました