スマホアプリで取得した電話着信を管理するCTIシステムの実装

ここでは、電話の着信情報を自動取得し、顧客データベースへ登録・管理するCTI(Computer Telephony Integration)システムの実装方法について解説します。

本システムでは、スマートフォンアプリとデータベースを連携させることで、着信番号の記録や顧客情報の管理を自動化し、電話対応業務の効率化を実現する構成を採用しています。

実装するCTIシステムの概要

本システムでできること

本システムでできること
  • 着信時に「発信者の電話番号」を自動で取得し、データベースへ記録する
  • 同日の同一番号がすでに存在する場合は、最終着信日時を更新して履歴を整理する
  • 端末側でサービスのON / OFFを切り替え、運用に合わせて記録対象を制御できる
  • 登録された着信情報をもとに、顧客管理や対応履歴管理へ連携できる(CRM連携の土台)

処理の流れ

処理フロー
  • ① 電話の着信を検知
  • ② 発信者の電話番号を取得
  • ③ 端末の電話番号および日時情報を取得
  • ④ サーバー側のデータベースへ自動送信
  • ⑤ 既存データがある場合は更新、なければ新規登録
  • ⑥ 管理画面や顧客管理システムから参照・活用

スマートフォンCTIを採用するメリット

従来のCTIは固定電話設備やPBXとの連携が必要となるケースが多く、導入コストや構築難易度が高い傾向がありました。

本システムではスマートフォンの通話機能を利用することで、比較的低コストかつ柔軟にCTI機能を実現できる構成を採用しています。

スマートフォンCTIの特徴
  • 専用電話設備が不要
  • 小規模事業者でも導入しやすい
  • 既存の業務システムへ連携しやすい
  • 拡張性が高くカスタマイズ可能
  • 電話対応履歴を自動記録できる
  • 顧客情報管理を効率化できる
  • 担当者の業務負担を軽減できる
  • 対応品質の向上につながる
  • 業務分析や改善に活用できる
  • DX推進の基盤として活用できる

ファイル構成

本CTIシステムでは、Androidアプリ側で着信検知とデータ送信を行い、 サーバー側のデータベースへ登録する構成を採用しています。 主なファイル構成は以下の通りです。


Androidアプリ構成(着信取得端末)
app/
└─ src/main/
   ├─ java/com/example/callinforegister/
   │   ├─ MainActivity.java        ← 権限取得・サービス制御・初期設定
   │   └─ ScreeningService.java    ← 着信検知・サーバー送信処理(CTI取得)
   │
   ├─ res/layout/
   │   └─ activity_main.xml        ← UIレイアウト
   │
   └─ AndroidManifest.xml          ← 権限設定・サービス登録


サーバー側(管理システム本体)
admin/
├─ kanri/
│   ├─ tel/index.php        ← 一覧画面(表示UI)
│   ├─ tel/telinfo/         ← 詳細画面(顧客履歴)
│   └─ tel/teladd/          ← 手動追加
│
├─ phps/
│   ├─ tel/index.php        ← 一覧ロジック
│   └─ receive_call.php     ← 着信受信API
│
└─ common/
    └─ db.php                      ← DB接続処理


データベース
MySQL
└─ telbkvps                         ← 着信履歴テーブル

スマートフォンアプリ側の実装

スマートフォンアプリ側では、Androidの通話機能と連携し、電話の着信を検知して発信者番号を取得する処理を実装します。

本システムではAndroidのCallScreeningServiceを利用し、着信イベントをトリガーとしてデータベース連携を行う構成を採用しています。

着信検知処理

着信検知にはAndroidのCallScreeningServiceを利用します。 このサービスを実装することで、着信時に自動で処理を実行できるようになります。


public class ScreeningService extends CallScreeningService {

    @Override
    public void onScreenCall(@NonNull Call.Details callDetails) {

        // 着信以外は処理しない
        if(callDetails.getCallDirection() != Call.Details.DIRECTION_INCOMING) return;

        // 応答処理
        CallResponse.Builder response = new CallResponse.Builder();
        respondToCall(callDetails, response.build());

    }
}

電話番号取得処理

着信情報から発信者の電話番号を取得し、 端末側の電話番号情報も取得してデータベース登録用の情報を生成します。


// 発信者番号取得
String callerNumber = callDetails.getHandle().getSchemeSpecificPart();

// 自端末番号取得
TelephonyManager tMgr =
    (TelephonyManager) getApplicationContext().getSystemService(Context.TELEPHONY_SERVICE);

String myNumber = tMgr.getLine1Number();

権限設定

電話情報を取得するためには、AndroidManifestで必要な権限を設定する必要があります。 CTIアプリでは通話関連の権限設定が重要なポイントとなります。


<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.READ_CALL_LOG" />
<uses-permission android:name="android.permission.READ_PHONE_NUMBERS" />
<uses-permission android:name="android.permission.READ_SMS" />

サービスの有効 / 無効制御

アプリ側ではSharedPreferencesを利用し、 CTI機能のON / OFFを切り替えられるようにしています。 これにより、運用に応じて記録対象を制御できます。


SharedPreferences dataStore = getSharedPreferences("DataStore", MODE_PRIVATE);
boolean serviceEnabled = dataStore.getBoolean("ServiceEnabled", true);

このようにスマートフォン側で着信検知から情報取得までを自動化することで、 電話対応業務の効率化と顧客情報管理の基盤を構築できます。

アプリのインストール方法(APK導入手順)

APKファイルのインストール手順

本システムのスマートフォンアプリは、Google Playストアを利用せず、 APKファイル形式で直接端末へインストールする構成を採用しています。 社内利用や業務専用アプリでは一般的な配布方法となります。

インストール手順
  • ① APKファイルをスマートフォンへ保存する(メール・共有・USBなど)
  • ② ファイルをタップしてインストールを開始
  • ③ 「提供元不明アプリの許可」を有効化
  • ④ インストール完了後、アプリを起動

Androidの仕様上、初回起動時には通話関連の権限許可が必要になります。本アプリでは必要な設定画面を自動で表示するため、特別な操作を行わなくても利用できる構成になっています。

データベース連携処理

スマートフォン側で取得した着信情報は、サーバー側のデータベースへ送信し、顧客対応履歴として蓄積します。

本システムではMySQLを利用し、着信日時・発信者番号・端末番号などの情報を管理する構成を採用しています。

既存データの確認処理

同日の同一電話番号がすでに登録されている場合は、 新規登録ではなく最終着信日時を更新する仕組みを採用しています。 これにより履歴の重複を防ぎ、管理しやすいデータ構造を維持できます。


ResultSet rs = stmt.executeQuery(
    "SELECT COUNT(*) FROM telbkvps WHERE hiduke LIKE '" + date + "%' AND telNo='" + callerNumber + "'"
);

データ更新処理(UPDATE)

既存レコードが存在する場合は、最終着信日時を更新します。


stmt.executeUpdate(
    "UPDATE telbkvps SET hiduke='" + dateTime + "' WHERE hiduke LIKE '" + date + "%' AND telNo='" + callerNumber + "'"
);

データ登録処理(INSERT)

同一電話番号の履歴が存在しない場合は、新規レコードを登録します。


stmt.executeUpdate(
    "INSERT INTO telbkvps VALUES('" + dateTime + "','','" + callerNumber + "','" + myNumber + "','','')"
);

CTIデータ蓄積のポイント

設計上のポイント
  • 着信履歴を自動蓄積することで顧客対応履歴の管理が容易になる
  • 同一番号の重複登録を防止しデータ品質を維持できる
  • CRMや顧客管理システムとの連携基盤として活用可能
  • 管理画面や分析システムへ拡張しやすい構造

このようにスマートフォンアプリとサーバー側システムを連携することで、電話対応履歴を自動で蓄積し、業務効率化や顧客管理の高度化を実現できます。

管理画面(PHP側)の実装

管理画面はPHPとMySQLを利用して構築し、着信履歴の一覧表示、検索、更新、分析機能を実装しています。

主な管理機能

管理画面でできること
  • 着信履歴の一覧表示
  • 日付検索
  • 顧客対応メモの登録
  • 取得媒体(広告)の管理
  • 詳細情報の確認
  • 時間帯別・媒体別の分析グラフ表示

着信履歴一覧表示処理

スマートフォンから登録された着信データは、 管理画面の一覧画面で確認できるようにしています。

一覧画面では日付条件を指定してデータを取得し、 テーブル形式で表示する構成を採用しています。


SELECT hiduke, telNo, getTel, reason, webmsg
FROM telbkvps
WHERE hiduke >= :start_date
AND hiduke <= :end_date
ORDER BY hiduke

検索機能(日付検索)

管理画面では期間を指定して着信履歴を検索できるようにしています。 業務では日別・月別の確認が必要になるため、日付条件を動的に生成し、 データベースから該当データのみ取得する構成を採用しています。


SELECT hiduke, telNo, getTel, reason, webmsg
FROM telbkvps
WHERE hiduke >= :start_date
AND hiduke <= :end_date
ORDER BY hiduke

着信情報更新処理

一覧画面から取得媒体やメモ情報を更新できるよう、 POST処理でデータベース更新を行います。


UPDATE telbkvps 
SET getTel = :getTel,
    reason = :reason,
    webmsg = :webmsg
WHERE hiduke = :hiduke 
AND telNo = :telNo

詳細画面(顧客対応履歴)

一覧画面から電話番号をクリックすると、 顧客詳細画面へ遷移し、過去の対応履歴を確認できる構成を採用しています。

電話番号をキーとして顧客データベースと連携することで、 対応履歴や過去の問い合わせ内容を時系列で表示できます。

詳細画面で表示する情報
  • 顧客名
  • 電話番号
  • 着信日時履歴
  • 対応メモ
  • 対応担当者
  • 過去問い合わせ履歴

分析グラフ表示

着信履歴データをもとに、時間帯別や媒体別の件数分析を行い、 グラフとして可視化できる機能を実装しています。

これにより電話対応状況の傾向を把握し、 業務改善や広告効果測定に活用できます。


SELECT COUNT(*) AS 件数, DATE_FORMAT(hiduke, "%H:00") AS 時間帯
FROM telbkvps
GROUP BY DATE_FORMAT(hiduke, "%H:00")

活用例・導入シーン

CTI(電話連携)システムは、さまざまな業種で活用できます。 電話対応が発生する業務であれば幅広く導入可能であり、 顧客管理や対応履歴の蓄積を効率化する基盤として活用できます。

営業管理・顧客対応業務

営業担当者への問い合わせ電話や既存顧客からの連絡履歴を自動記録することで、 対応履歴の管理や営業活動の可視化が可能になります。

予約受付・顧客サポート業務

電話予約や問い合わせが多い業種では、 着信履歴を自動蓄積することで顧客対応の効率化や対応漏れ防止につながります。

医療・美容・店舗サービス

来院予約や問い合わせ対応の履歴を管理することで、 顧客対応の品質向上や業務効率化を実現できます。

建設・不動産・設備業

現場対応や問い合わせ電話の履歴を自動記録することで、 顧客管理や対応状況の把握を効率化できます。

コールセンター・サポート窓口

着信履歴の蓄積や分析を行うことで、 業務改善や対応品質向上に活用できます。

CTIシステムが活用できる主な業種
  • 営業・顧客管理業務
  • 予約受付業務
  • 医療・美容・サービス業
  • 建設・不動産・設備業
  • コールセンター・サポート業務

CTIシステムは業種を問わず活用できるため、ホームページや業務システムと連携することで、より高度な顧客管理や業務効率化を実現できます。

まとめ

本記事では、スマートフォンアプリを活用して電話の着信情報を取得し、サーバー側のデータベースへ自動登録するCTI(電話連携)システムの実装方法について解説しました。

スマートフォンと業務システムを連携させることで、電話対応履歴の自動蓄積や顧客情報管理の効率化を実現でき、業務品質の向上やDX(業務のデジタル化)の基盤として活用できます。

本システムの主な実装ポイント
  • Androidアプリによる着信番号の自動取得
  • 端末情報・日時情報を含めたデータ送信処理
  • サーバーAPI経由でのデータベース登録
  • 同一番号の重複防止・履歴更新ロジック
  • PHP管理画面による履歴管理・検索機能
  • 顧客情報データベースとの連携基盤構築
  • 分析・業務改善へ活用可能なデータ蓄積

CTIシステムや業務連携機能の導入をご検討の際は、お気軽にご相談ください。

関連ページのご案内

ホームページ制作のご依頼・ご相談

お電話でのお問い合わせ
平日 09:00-18:00
メールでのお問い合わせ