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の画像と合わせてアップしておきます。

同じくNXを持っていてやってみようとしたところ、Javaの設定ができていないようでした。
どのように設定するか教えていただけませんか?
確か、下記の手順だったと思います。お試しください。
ダメだった場合、NTTの営業に問い合わせれば対応してくれますよ。
・「スタート」>「コントロールパネル」>「Java コントロールパネル」>「詳細」タブ>「Java Plug-in」に移動
・「次世代の Java Plug-in を有効にする」のチェックボックスを「オフ」にし、PCを再起動
初めまして。検索で見つけてきました。
αNXとのことですが、Type Mでは対応できるのでしょうか?
「Web通話履歴表示プログラム」で検索すると1世代古いαGX
type LではIIS稼働で取得できるマニュアルを見つけました。
当方ではαNX Type MでNTTサイトから説明書をダウンロード
してもその記述を見つけられませんでした。ohishi様の場合は
どのタイプをお使いなのでしょうか?可能であれば、Type Mで
のプログラムの使用可否をご教授頂ければ幸いです。
どうぞよろしくお願い申し上げます。
cervoさん、コメントありがとうございます。
私んとこはTypeLでした。
TypeMの取説みてみましたが、Web通話履歴の記載はありませんね。
NTTの営業に相談されたらいいかもしれません。
結構、わがまま聞いてくれますよ。
はじめまして。Type M でもブラウザ上では表示可能です。
http://www.jourakuin.jp/pub/NX_TypeM_history.jpg
Skywalkerさん、情報ありがとうございます。
TypeMでもcsv形式の履歴は取得できるんですね。
参考に私んとこの履歴画面を後でアップしときます。