About Cisco Device Specific Extension Usage for Message Waiting Indication

Unanswered Question
Sep 4th, 2007

Hi, I want to develop an application which checks voice email for all the users configured in the ActiveDirectory and will set the Message Watiting Indication Lamp on the IP phone of the user if he has unread voice email. After study the TAPI and made some test, I got a result that all TAPI mainly control CISCO TSP to interact with the phone terminal configured for call control(make call, recieve/transfer/hold/drop/conference etc). Although it has API such as ITPhone::get/setLampMode, ITAddress::messageWaiting(set not support), it can only manipulate the phone device we configured. There is no such way to get a remote end IP phone object and control its lamp status.

TAPI has lineDevSepcific function which can support vendor extensions, and from the doc, CISCO TSP has an extension CCiscoLineDevSpecificMsgWaitingDirn http://www.cisco.com/univercd/cc/td/doc/product/voice/vpdd/cdd/3_1/tapi/tap_extn.htm#xtocid11 which supports "turn the message waiting lamp on or off for the line specified by a parameter and is independent of the hLine parameter.". I wrote a C++ test program which calls TAPI 3.0 ITAddress2::DeviceSpecific with required parameter. But failed and got the error in the TSP log:

DevSpecific() [0x00000000] ERROR Dev Specific Ext unavailable : Ext Ver = 0x00000000

The following is the test code,:









IEnumAddressPtr spEnumAddr;

ITAddress * pAddr = NULL;


while ( S_OK == spEnumAddr->Next(1, &pAddr, NULL))


cout << pAddr->AddressName << endl;

string strProvider = W2A(pAddr->ServiceProviderName);

if (strstr(strProvider.c_str(),"Cisco")!=NULL)





if (pAddr!=NULL)


// create a call and get its callinfo object which is required by IAddress2::DeviceSpecfic

ITBasicCallControlPtr callctl = pAddr->CreateCall(_bstr_t("4165"), LINEADDRESSTYPE_PHONENUMBER, TAPIMEDIATYPE_AUDIO);

ITCallInfo * pInfo = NULL;

IEnumCallPtr calls = pAddr->EnumerateCalls();

if ( S_OK != calls->Next(1, &pInfo, NULL))


// todo: throw some exception etc


ITAddress2Ptr spAddr2 = pAddr;


// try the DeviceSpecific

CCiscoLineDevSpecificMsgWaitingDirn mwi;




spAddr2->DeviceSpecific(pInfo,(unsigned char *)mwi.lpParams(),mwi.dwSize());



catch (_com_error &e)


cout << e.ErrorMessage() << endl;


From the error message in the log, it seems the devSepcifc extension is not available. I guess maybe:

- My test code has wrong logic to call IAddress2::DeviceSpecific?

- I haven't negotiate with proper ExtVersion and APIVersion (I am now using TAPI 3.0 and CISCO TSP v4.1, CCM version is 4.1)

- The TAPI 3.0 COM interface has not filled enough internal data structure before calling ITAddress2::DeviceSpecific?

- Cisco TSP doen't support the extension

I haven't find enough sample and doc to prove any of my guess. Has anyone done similar things before and can tell me how to use the CCiscoLineDevSpecificMsgWaitingDirn? Some sample code on how to use the API will be great.

Or there are other ways for control the Message Waiting Indication phone lamp of any given phone number? My requirement is simple, just want to light up the MWI lamp of another phone. I am appreciated for any help. Thanks in advance.

Lei Xia

I have this problem too.
0 votes
  • 1
  • 2
  • 3
  • 4
  • 5
Overall Rating: 0 (0 ratings)


This Discussion