TAPI چیست ؟
TAPI یا Telephony API یک کتابخانه استاندارد برای کار با مودم و نوشتن برنامه های تلفنی می باشد . برای نمونه می توان از برنامه های Phone Dialer ( شماره گیر تلفن ) ، برنامه شبکه سازی تلفنی ( Dialup Networking ) ، برنامه تشخیص پالس مودم برای ضبط اطلاعات وارد شده از طرف کاربران و کاربردهای دیگر در این زمینه نام برد . این کتابخانه به شما کمک کمک می کند تا بدون درگیر شدن با برنامه نویسی سخت افزار مودم و درایور آن بطور مستقیم بتوانید برنامه های کاربردیی در این زمینه بنویسید .
مروری بر Microsoft Telephony :
Telephony امکان مجتمع سازی کامپیوترها با دستگاههای ارتباطی و شبکه ها را فراهم نموده است . معمولاً دستگاه ارتباطی یک مودم و خط ارتباطی نیز شبکه PSTN ( شبکه عمومی تلفن سوئیچینگ ) می باشد . برخی از کاربردهای Telephony عبارتند از :
۱ – کنفرانسهای مالتی مدیا بصورت Multicast
۲ – VoIP
۳ – مرکز پاسخ گویی اتوماتیک
۴ – تماس تلفنی از طریق کامپیوتر روی شبکه PSTN
دیاگرام زیر معماری Microsoft Telephony را نشان می دهد :
برنامه های TAPI :
برای نوشتن برنامه های کاربردی با استفاده از TAPI بایستی ابتدا در مورد سطح سرویسی که می خواهیم ارائه دهیم تصمیم گیری کنیم . برای مثال برای نوشتن یک برنامه شماره گیر تلفن نیاز به استفاده کامل از TAPI نیست و می توان از قابلیتهای خود ویندوز در این زمینه استفاده کرد ( Assisted Telephony ) . در بخشهای بعدی در مورد سطوح مختلف سرویس در TAPI بیشتر صحبت خواهم کرد .
دومین مطلبی که باید مورد توجه قرار داد اینست که می خواهیم از TAPI 2.x استفاده کنیم یا از TAPI 3.x . تفاوت ایندو آنست که TAPI ورژن ۲ یک API برمبنای C است در حالیکه ورژن ۳ آن بر مبنای تکنولوژی COM می باشد . در بخشهای بعدی مطالب بیشتری در مورد تفاوتهای این دو نسخه بیان خواهم کرد .
بخشهای اصلی یک برنامه کامل TAPI عبارتند از :
۱ – TAPI Initialization : شامل load کردن TAPI dll ، اتصال به TAPI Server ، مذاکره در مورد ورژن TAPI و برپاسازی سیستم اطلاع رسانی event می باشد .
۲ – Session Control : مقداردهی اولیه ، دریافت و کنترل تماسها
۳ – Device Control : دریافت و تنظیم اطلاعات دستگاه
۴ – Media Control : تشخیص و یا تولید تونها و ارقام ، کنترل stream
۵ – TAPI Shutdown : آزاد سازی منابع
مقداردهی اولیه TAPI :
عملکرد درست اجزای TAPI نیاز به برپاسازی محیط ارتباطی روی کامپیوتر مورد نظر دارد . مراحل این امر عبارتند از :
۱ – نصب TAPI : زمانیکه سخت افزار و یا نرم افزار برای اولین بار به کامپیوتر اضافه می شود انجام می گیرد . جزئیات کار به سیستم عامل و نرم افزار بستگی دارد .
۲ – مقداردهی ابتدائی : ساخت اشیا و مسیرهای ارتباطی
۳ – مذاکره در مورد ورژن TAPI : برای اطمینان از اینکه اجزای TAPI قادر به تبادل داده ها باشند .
۴ – استخراج اطلاعات منابع : بدست آوردن اطلاعاتی در مورد دستگاهی که می توان از آن در برنامه TAPI مورد نظرمان استفاده نمود .
۵ – Event notification : برپاسازی سیستم اطلاع رسانی event
مقداردهی اولیه TAPI در ویژوال بیسیک :
از منوی Project گزینه References را انتخاب کرده و از لیست مربوطه مورد Microsoft TAPI 3.0 Type Library را انتخاب کنید .
حال وارد بخش کد نویسی فرمتان شوید و متغیر objTAPI را بصورت زیر تعریف کنید :
Dim objTapi As TAPI
سپس در بخش مربوط به Form Load شی objTAPI را بصورت زیر ایجاد می کنیم :
Set objTapi = New TAPI
همانطور که در بخشهای قبلی گفته شد ، قبل از فراخوانی هر تابع TAPI ابتدا بایستی آنرا مقداردهی اولیه کنیم . برای مقداردهی اولیه کردن شی TAPI عبارت زیر را بنویسید :
Call objTapi.Initialize
انتخاب یک آدرس :
کد زیر نشان می دهد که چگونه می توان با استفاده از شی TAPI در ویژوال بیسیک منابع تلفنی در دسترس را برای یک آدرس که بتواند یک مجموعه مشخص از نیازها را مدیریت کند ، بررسی کرد .
توجه داشته باشید که قبل از انجام این کار بایستی عمل مقداردهی اولیه TAPI را که در بخش قبل ررسی شد ، انجام دهید .
نکته : در کد زیر عمل error checking انجام نگرفته است و برای استفاده از کد زیر در برنامه های واقعی بایستی بخش بررسی خطا را به آن اضافه کنید .
۱ – تعریف یک شی آدرس و یک شی مجموعه آدرس :
Dim gobjAddress As ITAddress
Dim objCollAddresses As ITCollection
۲ – تنظیم شی objCollAddress بعنوان یک مجموعه آدرس از شی objTapi :
Set objCollAddresses = objTapi.Addresses
۳ – پیدا کردن آدرسی که بتواند از واسط مورد نظر ما پشتیبانی کند :
bFound = False
For indexAddr = 1 To objCollAddresses.Count
Set objCrtAddress = objCollAddresses.Item(indexAddr)x
Set objMediaSupport = objCrtAddress
Set objAddressCapabilities = objCrtAddress
If objMediaSupport.QueryMediaType( nSelectedType ) x
bFound = True
End If
Set objAddressCapabilities = Nothing
Set objMediaSupport = Nothing
Set objCrtAddress = Nothing
If bFound = True Then Exit For
Next indexAddr
در صورتیکه آدرس مورد نظزر پیدا شود برنامه از حلقه خارج شده و gobjAddress یک آدرس قابل استفاده خواهد بود :
Set gobjAddress = objcollAddresses.Item(indexAddr)x
انجام Event Handling در TAPI :
کد زیر شامل یک event handler ساده برای TAPI ، رجیستر کردن واسط event ، تنظیم فیلتر event و رجیستر کردن تمام فراخوانیهای دادن اخطار است . هدف اصلی از این کد اینست که مطمئن شویم بخشی از TAPI که event ها را دریافت می کند پردازشی را قبل از انتقال به بخشهای دیگر انجام دهد .
تعاریفها :
Dim WithEvents gobjTapiWithEvents As TAPI
Attribute gobjTapiWithEvents.VB_VarHelpID = -1
Dim glRegistrationToken As Long
Const TAPI3_CALL_EVENTS =TE_CALLMEDIA Or
TE_CALLNOTIFICATION Or TE_CALLSTATE
تنظیم eventfilter بصورتیکه تمام event های تعریف شده برای TAPI را بپذیرد :
objTapi.EventFilter = TAPI3_CALL_EVENTS
رجیستر کردن event ها :
Set gobjTapiWithEvents = objTapi
Dim fOwner As Boolean, fMonitor As Boolean
Dim lMediaTypes As Long, lCallbackInstance As Long
fOwner = True
fOwner = True
fMonitor = False
lMediaTypes = TAPIMEDIATYPE_AUDIO
lCallbackInstance = 1
glRegistrationToken = gobjTapi.RegisterCallNotifications(gobjAddress,fMonitor,
fOwner,lMediaTypes,lCallbackInstance)x
انتخاب یک ترمینال :
+ قبل از اینکه یک ترمینال را برای برقراری ارتباط انتخاب کنید بایستی TAPI Initialization و عمل انتخاب آدرس را انجام داده باشید .
ابتدا یک متغیر از نوع ITBasicCallControl ( واسط کنترل تماس ) تعریف می کنیم :
Dim objCallControl As ITBasicCallControl
Set objCallControl = gobjReceivedCallInfo
سپس یک متغیر از نوع ITTerminalSupport ( کوئری از شی آدرس ) تعریف می کنیم :
Dim objTerminalSupport As ITTerminalSupport
Set objTerminalSupport = gobjAddress
سپس متغیر ترمینال را تعریف کرده و توسط شی objTerminalSupport یک ترمینال را برای آن استخراج می کنیم :
Dim objTerminal As ITTerminal
Set objTerminal = objTerminalSupport.GetDefaultStaticTerminal(lMediaType, dir)x
در اینجا دیگر نیازی به شی objTerminalSupport نیست بنابراین آنرا آزاد می کنیم :
Set objTerminalSupport = Nothing
سپس نیاز به تعریف شی objStreamControl برای کنترل ترمینال است :
Dim objStreamControl As ITStreamControl
Set objStreamControl = objCallControl
در صورتیکه این شی ایجاد شود ، به ازای استریم های موجود در ITCollection امکان ایجاد ترمینال در یک حلقه for بررسی می شود و ترمینال مناسب انتخاب می گردد :
If Not (objStreamControl Is Nothing) Then
Dim objITCollStreams As ITCollection
Set objITCollStreams = objStreamControl.Streams
Dim nIndex As Long, objCrtStream As ITStream
For nIndex = 1 To objITCollStreams.Count
Set objCrtStream = objITCollStreams.Item(nIndex)x
If objCrtStream.MediaType = lMediaType Then
If objCrtStream.Direction = dir Then
Call objCrtStream.SelectTerminal(objTerminal)x
End If
End If
Set objCrtStream = Nothing
Next nIndex
Set objITCollStreams = Nothing
Set objStreamControl = Nothing
End If
ایجاد یک تماس ( Make a Call ) :
+ قبل از این بخش بایستی مراحل TAPI Initialization و عمل انتخاب آدرس انجام شده باشد .
این بخش برای ایجاد یک شی تماس ، بررسی و مشخص کردن استریمی که با این تماس در ارتباط است ، انتخاب و ایجاد ترمینالهای مناسب و کامل کردن ارتباط استفاده می شود .
قبل TAPI Initialization و عمل انتخاب آدرس و انتخاب ترمینال انجام شده باشد .
در ابتدا با استفاده از متد CreateCall یک شی تماس ساخته می شود :
Set gobjCall = gobjOrigAddress.CreateCall(strDestAddress, nSelectedType,lMediaTypes)x
سپس در اینجا بایستی کدی که در بخش اول این درس برای انتخاب ترمینال نوشته شد آورده شود :
}
Select Terminal Code
{
سپس بایستی دستور Connect اجرا شود :
gobjCall.Connect (False)x
False بدین معناست که ارتباط بصورت آسنکرون برقرار می شود .
دریافت یک تماس :
کد زیر برای یافتن و یا ایجاد یک ترمینال مناسب برای دریافت یک تماس بکار می رود . بایستی توجه داشته باشید که قبل از اجرای کد زیر بایستی مراحل مقداردهی اولیه ، انتخاب یک آدرس و رجیسر کردن event ها را انجام دهید . همچنین در کد زیر بایستی مرحله انتخاب ترمینال را نیز انجام دهید . توجه داشته باشید که در کد زیر متغیر pEvent یک اشاره گر برای واسط ITCallNotificationEvent است که توسط TAPI به event Handler داده می شود :
If TapiEvent = TE_CALLNOTIFICATION Then
Dim objCallNotificationEvent As ITCallNotificationEvent
Set objCallNotificationEvent = pEvent
Dim gobjReceivedCallInfo As ITCallInfo
Set gobjReceivedCallInfo = objCallNotificationEvent.Call
Dim objCallControl As ITBasicCallControl
Set objCallControl = gobjReceivedCallInfo
objCallControl.Answer
End If
+ بخاطر طولانی شدن این سری مطالب و نیز تخصصی بودن آن که باعث می شود مخاطبین کمتری داشته باشد بحث TAPI را به همین جا خاتمه می دهم
دیدگاه خود را بیان کنید.
باید وارد سایت شده باشید برای دیدگاه دادن