Cisco7961Gの設定

電話機の設定ファイルを作る

ここまでは設定ファイルを一切置いていないので新しいファームウエアがTFTPサーバに展開されていたら電話機は起動時にそれを読み込んで更新するようになっています。
これから設定ファイルを作って電話機が電話機として動作するようにします。
設定ファイルも基本的にはTFTPサーバから電話機が読み込みます。

7961Gの設定ファイルは基本的にはXMLで書きます。企業などでたくさんの電話機を管理しやすいように全台に読ませるファイル、機種別に読ませるファイル、SIP/SCCP別に読ませるファイル、個別の号機に読ませるファイルなどを分けて作ることができます。管理者にとってはありがたいようなテキストファイルでの管理なのでそうでもないような。

OS7961.txt

ファームウエアのバージョンを1行書くだけのファイルなので機種別のファームウエアのバージョン指定ファイルのようです。企業などで1機種でSIPとSkinnyの号機の混在する環境(そんなことあるのか?)で間違ってこれを書いたら軽く死ねそうです。機種別のファームウエアのバージョン指定は次のXMLDefault.cnf.xmlでも指定できるし一覧もできるのでのでこのファイルの存在意味がよく解りません。
私はこのファイルを置いていません。

XMLDefault.cnf.xml

おそらく全台に読ませる為の設定ファイルだと思われます。
こんなふうに書きます。

<Default>
  <callManagerGroup>
    <members>
      <member  priority="0">
        <callManager>
          <ports>
            <ethernetPhonePort>2000</ethernetPhonePort>
            <sipPort>5060</sipPort>
            <mgcpPorts>
              <listen>2427</listen>
              <keepAlive>2428</keepAlive>
            </mgcpPorts>
          </ports>
          <processNodeName>192.168.0.24</processNodeName>
        </callManager>
      </member>
    </members>
  </callManagerGroup>
  <loadInformation1 model="Cisco IP Phone 7961">SIP41.9-3-1SR1-1S</loadInformation1>
  <authenticationURL></authenticationURL>
  <directoryURL></directoryURL>
  <idleURL></idleURL>
  <informationURL></informationURL>
  <messagesURL></messagesURL>
  <servicesURL></servicesURL>
</Default>

全台に関係ある項目だけ記入すれば良いと思われます。
複数機種存在する環境の場合はloadinformationの行を機種毎に複数行記入すれば良いかと。機種別にまとめてアップデートを行うならこのファイルでloadinformationにファームウエアのバージョンを書けば次に電話機が起動したときにアップデートするかと思われます。大きなコールセンターなどではそれだと一斉にアップデートしてネットワークの帯域を圧迫しかねないのでこのファイルでは指定しない方が良いのでしょうね。
複数機種管理しているならSIP41.9-3-1SR1-1Sのような行をloadInformationの数字を固有のものにして追記すれば良いようです。

SIPDefault.cnf
このファイルはXMLではありません。
# Proxy Server
proxy1_address: "192.168.0.24"

# Proxy Server Port (default - 5060)
proxy1_port: "5060"

# Emergency Proxy info
proxy_emergency: "192.168.0.24"
proxy_emergency_port: "5060"

# Backup Proxy info
proxy_backup: "192.168.0.24"
proxy_backup_port: "5060"

# Outbound Proxy info
outbound_proxy: ""
outbound_proxy_port: "5060"

# NAT/Firewall Traversal
nat_enable: "0"
nat_address: ""
voip_control_port: "5061"
start_media_port: "16384"
end_media_port: "32766"
nat_received_processing: "0"

# Proxy Registration (0-disable (default), 1-enable)
proxy_register: "1"

# Phone Registration Expiration [1-3932100 sec] (Default - 3600)
timer_register_expires: "3600"

# Codec for media stream (g711ulaw (default), g711alaw, g729)
preferred_codec: "none"

# TOS bits in media stream [0-5] (Default - 5)
tos_media: "5"

# Enable VAD (0-disable (default), 1-enable)
enable_vad: "0"

# Allow for the bridge on a 3way call to join remaining parties upon hangup
cnf_join_enable: "1" ; 0-Disabled, 1-Enabled (default)

# Allow Transfer to be completed while target phone is still ringing
semi_attended_transfer: "0" ; 0-Disabled, 1-Enabled (default)

こんな感じでずらずら書いていけば良いようです。XMLが苦手ならこちらで書いた方が良いかもしれません。
逆にXMLの方が良いならこちらでなく次のファイルに書く方が良いかも。正直なところこのファイルの存在意味があまり解っていません。7960GではTFTPサーバに取りに来ている形跡が無いので要らないのかもしれません。私はこのファイルは無しにしています。

SEP001Bxxxxxxxx.cnf.xml

001Bxxxxxxxxの部分は電話機のMACアドレスになります。001Bxxxxxxxxの方のMACアドレスはDHCPサーバなどから調べなくても電話機裏側のシールに書いてあるのでそれをそのまま書けば良いかと。
こちらはファイル名にMACアドレスが入ることからも解るとおり電話機1台づつの固有の設定ファイルになります。
このファイルは設定例がネットに豊富にあるのですが似た機種用、違うバージョン用に惑わされて間違った記述をしやすいというのもあります。

<device>
  <deviceProtocol>SIP</deviceProtocol>
  <sshUserId>admin</sshUserId>
  <sshPassword>freechat</sshPassword>
  <devicePool>
    <dateTimeSetting>
      <dateTemplate>Y.M.D</dateTemplate>
      <timeZone>Tokyo Standard Time</timeZone>
      <ntps>
        <ntp>
          <name>192.168.0.24</name>
          <ntpMode>Unicast</ntpMode>
        </ntp>
      </ntps>
    </dateTimeSetting>
    <callManagerGroup>
      <members>
        <member priority="0">
          <callManager>
            <name>192.168.0.24</name>
            <ports>
              <ethernetPhonePort>2000</ethernetPhonePort>
              <sipPort>5060</sipPort>
              <securedSipPort>5061</securedSipPort>
            </ports>
            <processNodeName>192.168.0.24</processNodeName>
          </callManager>
        </member>
      </members>
    </callManagerGroup>
  </devicePool>
  <commonProfile>
    <phonePassword></phonePassword>
    <backgroundImageAccess>true</backgroundImageAccess>
    <callLogBlfEnabled>3</callLogBlfEnabled>
  </commonProfile>
  <loadInformation>SIP41.9-3-1SR1-1S</loadInformation>
  <vendorConfig>
    <disableSpeaker>false</disableSpeaker>
    <disableSpeakerAndHeadset>false</disableSpeakerAndHeadset>
    <pcPort>0</pcPort>
    <settingsAccess>1</settingsAccess>
    <garp>0</garp>
    <voiceVlanAccess>0</voiceVlanAccess>
    <videoCapability>1</videoCapability>
    <autoSelectLineEnable>0</autoSelectLineEnable>
    <webAccess>0</webAccess>
    <sshAccess>0</sshAccess>
    <g722CodecSupport></g722CodecSupport>
    <daysDisplayNotActive>1,2,3,4,5,6,7</daysDisplayNotActive>
    <displayOnTime>00:00</displayOnTime>
    <displayOnDuration>24:00</displayOnDuration>
    <displayIdleTimeout>00:00</displayIdleTimeout>
    <displayOnWhenIncomingCall>1</displayOnWhenIncomingCall>
    <spanToPCPort>1</spanToPCPort>
    <loggingDisplay>1</loggingDisplay>
    <loadServer></loadServer>
  </vendorConfig>
  <commonConfig></commonConfig>
  <enterpriseConfig>
    <videoCapability>1</videoCapability>
    <webAccess>0</webAccess>
    <eapAuthentication>2</eapAuthentication>
    <webProtocol>0</webProtocol>
  </enterpriseConfig>
  <advertiseG722Codec></advertiseG722Codec>
  <networkLocale>Japan</networkLocale>
  <deviceSecurityMode>1</deviceSecurityMode>
  <idleTimeout>0</idleTimeout>
  <authenticationURL></authenticationURL>
  <directoryURL>http://example.com/directory.xml</directoryURL>
  <idleURL></idleURL>
  <informationURL></informationURL>
  <messagesURL></messagesURL>
  <proxyServerURL></proxyServerURL>
  <servicesURL></servicesURL>
  <dscpForSCCPPhoneConfig>96</dscpForSCCPPhoneConfig>
  <dscpForSCCPPhoneServices>0</dscpForSCCPPhoneServices>
  <dscpForCm2Dvce>96</dscpForCm2Dvce>
  <transportLayerProtocol>2</transportLayerProtocol>
  <dndCallAlert>5</dndCallAlert>
  <phonePersonalization>1</phonePersonalization>
  <rollover>0</rollover>
  <singleButtonBarge>0</singleButtonBarge>
  <joinAcrossLines>1</joinAcrossLines>
  <autoCallPickupEnable>false</autoCallPickupEnable>
  <blfAudibleAlertSettingOfIdleStation>0</blfAudibleAlertSettingOfIdleStation>
  <blfAudibleAlertSettingOfBusyStation>0</blfAudibleAlertSettingOfBusyStation>
  <capfAuthMode>0</capfAuthMode>
  <capfList>
    <capf>
      <phonePort>3804</phonePort>
    </capf>
  </capfList>
  <certHash></certHash>
  <encrConfig>false</encrConfig>
  <sipProfile>
    <sipProxies>
      <backupProxy>USECALLMANAGER</backupProxy>
      <backupProxyPort>5060</backupProxyPort>
      <emergencyProxy>USECALLMANAGER</emergencyProxy>
      <emergencyProxyPort>5060</emergencyProxyPort>
      <outboundProxy></outboundProxy>
      <outboundProxyPort></outboundProxyPort>
      <registerWithProxy>true</registerWithProxy>
    </sipProxies>
    <sipCallFeatures>
      <cnfJoinEnabled>true</cnfJoinEnabled>
      <callForwardURI>x-cisco-serviceuri-cfwdall</callForwardURI>
      <callPickupURI>x-cisco-serviceuri-pickup</callPickupURI>
      <callPickupListURI>x-cisco-serviceuri-opickup</callPickupListURI>
      <callPickupGroupURI>x-cisco-serviceuri-gpickup</callPickupGroupURI>
      <meetMeServiceURI>x-cisco-serviceuri-meetme</meetMeServiceURI>
      <abbreviatedDialURI>x-cisco-serviceuri-abbrdial</abbreviatedDialURI>
      <rfc2543Hold>false</rfc2543Hold>
      <callHoldRingback>2</callHoldRingback>
      <localCfwdEnable>true</localCfwdEnable>
      <semiAttendedTransfer>true</semiAttendedTransfer>
      <anonymousCallBlock>2</anonymousCallBlock>
      <callerIdBlocking>2</callerIdBlocking>
      <dndControl>0</dndControl>
      <remoteCcEnable>true</remoteCcEnable>
      <retainForwardInformation>true</retainForwardInformation>
    </sipCallFeatures>
    <sipStack>
      <sipInviteRetx>6</sipInviteRetx>
      <sipRetx>10</sipRetx>
      <timerInviteExpires>180</timerInviteExpires>
      <timerRegisterExpires>3600</timerRegisterExpires>
      <timerRegisterDelta>5</timerRegisterDelta>
      <timerKeepAliveExpires>120</timerKeepAliveExpires>
      <timerSubscribeExpires>120</timerSubscribeExpires>
      <timerSubscribeDelta>5</timerSubscribeDelta>
      <timerT1>500</timerT1>
      <timerT2>4000</timerT2>
      <maxRedirects>70</maxRedirects>
      <remotePartyID>false</remotePartyID>
      <userInfo>None</userInfo>
    </sipStack>
    <autoAnswerTimer>0</autoAnswerTimer>
    <autoAnswerAltBehavior>false</autoAnswerAltBehavior>
    <autoAnswerOverride>true</autoAnswerOverride>
    <transferOnhookEnabled>false</transferOnhookEnabled>
    <enableVad>false</enableVad>
    <preferredCodec>none</preferredCodec>
    <dtmfAvtPayload>101</dtmfAvtPayload>
    <dtmfDbLevel>3</dtmfDbLevel>
    <dtmfOutofBand>avt</dtmfOutofBand>
    <alwaysUsePrimeLine>true</alwaysUsePrimeLine>
    <alwaysUsePrimeLineVoiceMail>true</alwaysUsePrimeLineVoiceMail>
    <kpml>3</kpml>
    <natEnabled>false</natEnabled>
    <natAddress>192.168.0.24</natAddress>
    <stutterMsgWaiting>2</stutterMsgWaiting>
    <callStats>false</callStats>
    <silentPeriodBetweenCallWaitingBursts>10</silentPeriodBetweenCallWaitingBursts>
    <disableLocalSpeedDialConfig>false</disableLocalSpeedDialConfig>
    <startMediaPort>16384</startMediaPort>
    <stopMediaPort>32766</stopMediaPort>
    <voipControlPort>5060</voipControlPort>
    <dscpForAudio>184</dscpForAudio>
    <ringSettingBusyStationPolicy>0</ringSettingBusyStationPolicy>
    <softKeyFile>softkey.xml</softKeyFile>
    <dialTemplate>dialplan.xml</dialTemplate>
    <phoneLabel>SIP9-3-1SR1</phoneLabel>
    <sipLines>
      <line button="1" lineIndex="1">
        <featureID>9</featureID>
        <featureLabel>User 5005</featureLabel>
        <name>5005</name>
        <displayName>User Name</displayName>
        <contact>5005</contact>
        <proxy>USECALLMANAGER</proxy>
        <port>5060</port>
        <autoAnswer>
          <autoAnswerEnabled>2</autoAnswerEnabled>
        </autoAnswer>
        <callWaiting>3</callWaiting>
        <authName>5005</authName>
        <authPassword>SECRETPASSWORD</authPassword>
        <sharedLine>false</sharedLine>
        <messageWaitingLampPolicy>3</messageWaitingLampPolicy>
        <messageWaitingAMWI>1</messageWaitingAMWI>
        <messagesNumber>*97</messagesNumber>
        <ringSettingIdle>4</ringSettingIdle>
        <ringSettingActive>5</ringSettingActive>
        <forwardCallInfoDisplay>
          <callerName>true</callerName>
          <callerNumber>false</callerNumber>
          <redirectedNumber>false</redirectedNumber>
          <dialedNumber>true</dialedNumber>
        </forwardCallInfoDisplay>
        <maxNumCalls>4</maxNumCalls>
        <busyTrigger>2</busyTrigger>
      </line>
    </sipLines>
  </sipProfile>
  <phoneServices>
    <provisioning>0</provisioning>
    <phoneService type="1" category="0">
      <name>Missed Calls</name>
      <url>Application:Cisco/MissedCalls</url>
      <vendor></vendor>
      <version></version>
    </phoneService>
    <phoneService type="1" category="0">
      <name>Received Calls</name>
      <url>Application:Cisco/ReceivedCalls</url>
      <vendor></vendor>
      <version></version>
    </phoneService>
    <phoneService type="1" category="0">
      <name>Placed Calls</name>
      <url>Application:Cisco/PlacedCalls</url>
      <vendor></vendor>
      <version></version>
    </phoneService>
    <phoneService type="1" category="0">
      <name></name>
      <url></url>
      <vendor></vendor>
      <version></version>
    </phoneService>
  </phoneServices>
</device>

やっと動いた

7961Gが動いた

着信音

7961Gは標準では2音しか着信音が入っていないようです。増やすには自分で着信音を作るかどこかからダウンロードしてTFTPサーバに置きringlist.xmlも作って置きます。(ファイル名は7961GではRinglist.xmlでもRingList.xmlでもなくringlist.xmlです。)

ringlist.xml
<CiscoIPPhoneRingList>
  <Ring>
    <DisplayName>電話機上の表示名1</DisplayName>
    <FileName>着信音1.raw</FileName>
  </Ring>
  <Ring>
    <DisplayName>電話機上の表示名2</DisplayName>
    <FileName>着信音2.raw</FileName>
  </Ring>
</CiscoIPPhoneRingList>

着信音は8kHzで8bit、ulaw圧縮で2秒以内という条件で作成する必要があるようです。
変換コマンド (soxのバージョンにより不適切な場合があります。以下はsoxがファイル名の拡張子で種別を判断できる場合)

sox input.wav -r 8000 output.ul
mv output.ul output.raw
ちなみに電話機用ではなくAsteriskの保留音(MOH)やメッセージを16KHzで作成する場合。(元ファイルはmp3等でも可)
sox input.wav -c 1 -r 16000 output.sln
mv output.sln output.sln16

同じく電話機用ではなくAsteriskの保留音(MOH)やメッセージを8KHzで作成する場合。
sox input.wav -c 1 -r 8000 output.gsm

保留音ファイルは/usr/local/share/asterisk/moh/下に置く。
メッセージ系のファイルなら/usr/local/share/asterisk/sounds/または/usr/local/share/asterisk/sounds/ja/下に置く。

着信音の変更は電話機側で[settings](四角にチェックのアイコン)ボタンを押し[1][1][1]、画面左下の[Select]、上下ボタンで着信音を選択、画面下の[Play]で視聴、良ければ[Select][Save]で設定が保存されます。

g3-tones.xml

初期状態では受話器を上げた際(オフフックの状態)で何も音が鳴らないので電話使えるのか心配になります。日本の一般的な電話だと受話器を上げると「ツー」と鳴るのでこの音を鳴らして上げると安心感が増します。それらの音を設定するのがg3-tones.xmlです。国によっては音の鳴り方が違って「プップップ」とかだったりするので日本に合わせたファイルを用意するのが良いかと思います。

もしかしたらネットを探せば日本向けのg3-tones.xmlが見つかるかもしれませんが、探せない場合はCISCOのウェブから7961G用のファームウエアと同じくロケールファイルがダウンロードできるのでそれぞれ最新版の日本用のファイルとcombinedの2つを落とします。ロケールファイルは何故か拡張子がsngのファイルしか提供されていないので扱いに困りますが、これをtar.gz形式に変換するstripsgnスクリプトがACS DataのUser Localeのページにあるのでありがたく頂いてきて解凍します。

$ ./stripsgn po-locale-combined_network-k3-10.3.1.1000-1.cop.sgn
$ tar zxf po-locale-combined_network-k3-10.3.1.1000-1.tar.gz
$ tar xf po-locale-combined_network-k3-10.3.1.1000-1.tar
$ cd ./usr/local/cm/tftp/japan

ここに7960-tones.xmlというファイルがあるのでg3-tones.xmlにリネームしてTFTPサーバの最上位階層にコピーします。
これで次に電話機を再起動した後から「ツー」などの音が出るようになります。

その他のロケールファイル

$ ./stripsgn po-locale-ja_JP-k3-10.3.1.1000-1.cop.sgn
$ tar zxf po-locale-ja_JP-k3-10.3.1.1000-1.tar.gz
$ tar xf po-locale-ja_JP-k3-10.3.1.1000-1.tar
$ cd ./usr/local/cm/tftp/japanese_japan

日本語ロケールであれば上の様にjapanese_japanディレクトリ下にいろいろ入っています。7960GのSIP用ならmk-sip.jarとその他ファイル名に7960が付いているファイルをTFTPサーバに置く。ファイル名に7960とか機種名が付いてるのはリネームが必要です。

ダイヤルプラン

あまり良く解っていませんが、おそらくダイヤルした時の挙動を指定するものです。
dialplan.xml

<DIALTEMPLATE>
  <TEMPLATE MATCH="*" Timeout="3"/>
</DIALTEMPLATE>
ボタン押す間隔が3秒を超えたら連続操作と認識しないという設定(のつもり)です。
もう少し細かく指定することもできる様ですが細かいこと気にしない性格なのでシンプルにこれだけ。

電話機の再起動

電話機の再起動はパネルの右の方にある[directories](開いた本のアイコン)ボタン, [services](地球儀のアイコン)ボタン, [settings](四角にチェックのアイコン)ボタンのどれかを押してダイヤルパッドで [*] [*] [#] [*] [*] を押す。数秒すると再起動が始まる。

電話機の操作で設定変更

7960電話機は殆ど電話機での設定変更はできませんが、一部だけ着信音や壁紙などを選択できる程度の普通の変更とネットワークの設定などロックモードを解除して行う設定変更が行えるようになっています。
設定画面は[settings](四角にチェックのアイコン)ボタンを押して表示されている番号をダイヤルパッドでプッシュするか上下ボタンで選択して画面下一番左の[Select]ボタンを押すなどしてメニュー階層を進みます。ロック解除を伴わない変更は選択して[Save]をして[Exit]で、ロック解除が必要な変更は液晶画面右上の方の南京錠の上半分の弧の左側が閉じていればロック中、隙間があればロック解除中で、ロック解除中のモードでのみ変更できます。ロック解除、再ロックはSettingモードのどの画面でも[*][*][#]を押せば2秒以内にはモードが変わります。液晶画面の南京錠マークを確認して下さい。

終わったぁ

ある程度苦労するのは覚悟していましたが、今回は図らずもCiscoの電話機で苦労する点をほぼひと通り満喫できたかもしれません。
もう次からはCiscoは買いませんし間違って入手しても動かなかったら絶対に投げ捨てます。

次は禁断のもっと安くする裏ワザです。

関連記事: 7961G電話機のファームウエア更新   こちらで壁紙の変更もやってます