NTT αNXでの通話履歴活用方法

NTT αNXでは、「通話履歴」をパソコンで取得することができる。

「Web通話履歴表示プログラム」と言うのがあり、マニュアルに沿ってセットアップすると、Web上で通話履歴が参照できるようになる。 ...のはずが、私のところでは、うまくいかずNTTの営業に対応してもらった。 どうもJAVAのバージョンが新しいと設定を変更してやる必要があるらしい。

で、この通話履歴を、SQL Serverなどのデータベースに登録しちゃえば、MS-Accessなどで簡単に共有できるようになるので試してみた。

「Web通話履歴表示プログラム」をセットアップすると、「call_histフォルダ」が出来るが、その中に 「call_info.log」があり、CSV形式で通話履歴が保存されている。

このファイルを参照してDBに登録するスクリプトを作成してみたので、メモっておきます。

ポイント:SQL文はスクリプト内では定義していません。SQL分を含むストアドプロシージャをSQL Server側に登録しておいて、スクリプトからストアドを呼び出す形にしています。この方式ならば、スクリプトの作成前に、SQL文のテストを済ますことができるので、結構スムースに作業できます。

◆SQL Serverへの通話履歴の登録スクリプト

Option Explicit

Dim CN,RS,LASTNO,RECNO,objWshShell
Dim StrSQL,StrProc,StrParam

RECNO = ""

Set CN = WScript.CreateObject("ADODB.Connection")
CN.ConnectionString = "Provider=SQLOLEDB;Data Source=WINSVRxx\DBxx;Initial Catalog=通話履歴管理;
User ID=xxxx;Password=xxxx"
CN.Open

'=====================================================================
'最終番号の取得
'=====================================================================
Set RS = WScript.CreateObject("ADODB.Recordset")
StrSQL = "EXEC q40最終番号参照"
RS.Open StrSQL, CN
LASTNO = cint(RS(0))
RS.Close
'WScript.Echo LASTNO

'=====================================================================
'電話履歴の読込、DB登録
'=====================================================================

Dim objFSO      ' FileSystemObject
Dim objFile     ' ファイル読み込み用
Dim str,str2
Dim aryStr,aryStr2
Dim i,seq,IO

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile("call_info.log")

str = ""
do while objFile.AtEndOfStream <> True

  aryStr = Split(objFile.ReadLine,",")
  i=1
  for Each aryStr2 in aryStr
   if aryStr2 = "" then aryStr2 = "-" end if

   if i = 3 then
     select case aryStr2
      case "I"
       IO = "I"
      case "O"
       IO = "O"
      case "R"
       IO = "R"
      case else
       IO = ""
     end select
   end if 

   if i = 4 then
     if cint(aryStr2)+ reckey * 10000 <= LASTNO then 
       exit for
     end if
     RECNO = cint(aryStr2)+ reckey * 10000 
   end if 

   if IO = "I" then
     select case i
      case 4
       str=str & "@d01=" & reckey  & aryStr2 & "," 
      case 5
       str=str & "@d02=""" & replace(aryStr2,"-",":") & ""","
      case 8
       str=str & "@d03=""" & aryStr2 & ""","
      case 9
       str=str & "@d04=""" & aryStr2 & ""","
      case 10
       str=str & "@d05=""" & replace(aryStr2,"-",":") & ""","
      case 11
       str=str & "@d06=" & aryStr2
       StrParam = str
       StrProc="q42着信情報登録"
       StrSQL = "EXEC " & StrProc
       'WScript.Echo StrSQL  & " " & StrParam '◆デバッグ用
       CN.Execute StrSQL  & " " & StrParam
       str = ""
       'exit do
     end select
   end if

   if IO = "R" then
     select case i
      case 4
       str=str & "@d01=" & reckey & aryStr2 & "," 
      case 5
       str=str & "@d02=""" & replace(aryStr2,"-",":") & ""","
      case 8
       str=str & "@d03=""未応答"","
      case 9
       if aryStr2 = "" then
         str=str & "@d04=""空白"","
       else
         str=str & "@d04=""" & aryStr2 & ""","
       end if
      case 10
       str=str & "@d05=""" & replace(aryStr2,"-",":") & ""","
      case 11
       str=str & "@d06=" & aryStr2
       StrParam = str
       StrProc="q42着信情報登録"
       StrSQL = "EXEC " & StrProc
       'WScript.Echo StrSQL  & " " & StrParam '◆デバッグ用
       CN.Execute StrSQL  & " " & StrParam
       str = ""
       'exit do
     end select
   end if

   if IO = "O" then
     select case i
      case 4
       str=str & "@d01=" & reckey & aryStr2 & "," 
      case 5
       str=str & "@d02=""" & replace(aryStr2,"-",":") & ""","
      case 11
       str=str & "@d03=""" & aryStr2 & ""","
      case 13
       str=str & "@d04=""" & aryStr2 & ""","
      case 14
       str=str & "@d05=""" & replace(aryStr2,"-",":") & """"
       StrParam = str
       StrProc="q43発信情報登録"
       StrSQL = "EXEC " & StrProc
       'WScript.Echo StrSQL  & " " & StrParam '◆デバッグ用
       CN.Execute StrSQL  & " " & StrParam
       str = ""
       'exit do
     end select
   end if

    i=i+1

  next

loop

objFile.Close
Set objFile = Nothing
Set objFSO = Nothing

'=====================================================================
'最終番号の更新
'=====================================================================
if RECNO<>"" then
  StrSQL = "EXEC q41最終番号更新"
  StrParam = "@lastno = " & RECNO  
  'WScript.Echo StrSQL  & " " & StrParam
  CN.Execute StrSQL  & " " & StrParam
  Set objWshShell = WScript.CreateObject("WScript.Shell")
  objWshShell.Exec("cscript unyolog.vbs ""*" & RECNO & """")
 else
  'Set objWshShell = WScript.CreateObject("WScript.Shell")
  'objWshShell.Exec("cscript unyolog.vbs ""+" & LASTNO & """")
end if

CN.Close
Set CN = Nothing

Time2=Timer()

'MsgBox "登録完了 " & Time2-Time1 & "秒"

◆作成したストアドプロシージャは4個

-- =============================================
-- Description:	最終番号参照
-- =============================================
ALTER PROCEDURE [dbo].[q40最終番号参照]
AS
BEGIN
	SET NOCOUNT ON;
	SELECT [通話履歴管理].[dbo].[本社最終番号] ()
END

※[本社最終番号]はスカラ関数として登録
ALTER FUNCTION [dbo].[本社最終番号]()
RETURNS int
AS
BEGIN
	RETURN (
	 SELECT [lastno]
	 FROM [通話履歴管理].[dbo].[t20本社基本情報]
 	 WHERE [id] = 1
	)
END

-- =============================================
-- Description:	最終番号更新
-- =============================================
ALTER PROCEDURE [dbo].[q41最終番号更新]
	@lastno int
AS
BEGIN
	SET NOCOUNT ON;

	UPDATE [通話履歴管理].[dbo].[t20本社基本情報]
	   SET [lastno] = @lastno
	WHERE [id] = 1
END

-- =============================================
-- Description:	着信情報登録
-- =============================================
ALTER PROCEDURE [dbo].[q42着信情報登録]
	@d01 int,@d02 datetime,@d03 nvarchar(255),@d04 nvarchar(255),@d05 nvarchar(255),@d06 int
AS
BEGIN
	SET NOCOUNT ON;

     INSERT INTO [通話履歴管理].[dbo].[t21本社着信情報]
           ([REC番号]
           ,[通話開始日時]
           ,[内線]
           ,[相手先番号]
           ,[通話時間]
           ,[使用回線])
     VALUES
           (@d01,
	  @d02,
	  @d03,
	  @d04,
	  @d05,
	  @d06)
END

-- =============================================
-- Description:	発信情報登録
-- =============================================
ALTER PROCEDURE [dbo].[q43発信情報登録]
	@d01 int,@d02 datetime,@d03 nvarchar(255),@d04 nvarchar(255),@d05 nvarchar(255)
AS
BEGIN
	SET NOCOUNT ON;

     INSERT INTO [通話履歴管理].[dbo].[t22本社発信情報]
           ([REC番号]
           ,[通話開始日時]
           ,[内線]
           ,[相手番号]
           ,[通話時間])
     VALUES
           (@d01,
    	    @d02,
	    @d03,
	    @d04,
	    @d05)
END

◆テーブル構造

DB名:通話履歴管理

テーブル名:t21本社着信情報

カラム名:
REC番号
通話開始日時
内線
相手先番号
通話時間
使用回線

テーブル名:t22本社発信情報

カラム名:
REC番号
通話開始日時
内線
相手番号
通話時間

■create文
CREATE TABLE [dbo].[t21本社着信情報](
	[REC番号] [int] NOT NULL,
	[通話開始日時] [datetime] NULL,
	[内線] [nvarchar](255) NULL,
	[相手先番号] [nvarchar](255) NULL,
	[通話時間] [nvarchar](255) NULL,
	[使用回線] [int] NULL,
 CONSTRAINT [aaaaa01_着信情報_PK] PRIMARY KEY NONCLUSTERED 
(
	[REC番号] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

CREATE TABLE [dbo].[t22本社発信情報](
	[REC番号] [int] NOT NULL,
	[通話開始日時] [datetime] NULL,
	[内線] [nvarchar](255) NULL,
	[相手番号] [nvarchar](255) NULL,
	[通話時間] [nvarchar](255) NULL,
 CONSTRAINT [aaaaa02_発信情報_PK] PRIMARY KEY NONCLUSTERED 
(
	[REC番号] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

CREATE TABLE [dbo].[t20本社基本情報](
	[id] [nchar](10) NOT NULL,
	[lastno] [nchar](10) NULL,
 CONSTRAINT [PK_t22本社電話基本情報] PRIMARY KEY CLUSTERED 
(
	[id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

2013/03/01追記

サーバを再起動した際に、毎回手作業でログオン操作が必要で、めんどくさかった。
自動でログインできるようにJavascriptを書いてみた。
各行にsleepを入れてアバウトに画面遷移の待ち時間を調整してます。

?<pre>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="ja">
? <head>
? <meta http-equiv="Content-Type" content="text/html; charset=shift-jis">
? <meta http-equiv="Content-Style-Type" content="text/css">
? <META NAME="robots" CONTENT="none">
? <title>callhist</title>
? </head>

<SCRIPT language="JavaScript">
<!--
var subWin;
var elements;

subWin = window.open("http://localhost/callhist.htm");
Sleep(1);
subWin.frames[0].document.forms[0].elements[2].click();
Sleep(1);
subWin.frames[1].document.form_dc.elements[0].checked = true;
Sleep(1);
elements = subWin.frames[1].document.getElementsByName("dc_ok"); 
Sleep(1);
elements[0].click();
Sleep(1);
elements = subWin.frames[1].document.getElementsByName("dc_cancel"); 
Sleep(1);
elements[0].click();
Sleep(1);
subWin.frames[0].document.getElementById('id_login').click();
Sleep(1);
subWin.frames[1].document.getElementById('mylogin').click();
Sleep(1);
//window.close();

function Sleep(T){
?? var d1 = new Date().getTime();
?? var d2 = new Date().getTime();
?? while( d2 < d1+1000*T ){d2=new Date().getTime();}
?? return;
}

//-->
</SCRIPT>

2013/04/08 追記

Type Mの通話履歴の画面を入手したので、Type Lの画像と合わせてアップしておきます。

NTT αNXでの通話履歴活用方法” への6件のフィードバック

  1. 同じくNXを持っていてやってみようとしたところ、Javaの設定ができていないようでした。
    どのように設定するか教えていただけませんか?

  2. 確か、下記の手順だったと思います。お試しください。
    ダメだった場合、NTTの営業に問い合わせれば対応してくれますよ。

    ・「スタート」>「コントロールパネル」>「Java コントロールパネル」>「詳細」タブ>「Java Plug-in」に移動
    「次世代の Java Plug-in を有効にする」のチェックボックスを「オフ」にし、PCを再起動

  3. 初めまして。検索で見つけてきました。
    αNXとのことですが、Type Mでは対応できるのでしょうか?
    「Web通話履歴表示プログラム」で検索すると1世代古いαGX
    type LではIIS稼働で取得できるマニュアルを見つけました。
    当方ではαNX Type MでNTTサイトから説明書をダウンロード
    してもその記述を見つけられませんでした。ohishi様の場合は
    どのタイプをお使いなのでしょうか?可能であれば、Type Mで
    のプログラムの使用可否をご教授頂ければ幸いです。
    どうぞよろしくお願い申し上げます。

  4. cervoさん、コメントありがとうございます。
    私んとこはTypeLでした。
    TypeMの取説みてみましたが、Web通話履歴の記載はありませんね。
    NTTの営業に相談されたらいいかもしれません。
    結構、わがまま聞いてくれますよ。

  5. Skywalkerさん、情報ありがとうございます。
    TypeMでもcsv形式の履歴は取得できるんですね。
    参考に私んとこの履歴画面を後でアップしときます。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です