Zoiper sdk fact sheet

Protocols:

SIP:

  • RFC 2976: The SIP INFO Method
  • RFC 3261: SIP: Session Initiation Protocol
  • RFC 3263: SIP: Locating SIP Servers
  • RFC 3313: Private SIP Extensions for Media Authorization (Partial)
  • RFC 3325: Private Extensions to SIP for Asserted Identity within Trusted Networks (Partial)
  • RFC 3326: The Reason Header Field for SIP
  • RFC 3329: Security Mechanism Agreement for SIP (Partial)
  • RFC 3428: SIP Extension for Instant Messaging
  • RFC 3515: SIP Refer Method
  • RFC 3581: rport An Extension to SIP for Symmetric Response Routing
  • RFC 3842: MWI A Message Summary and Message Waiting Indication Event Package for SIP
  • RFC 3891: SIP «Replaces» Header
  • RFC 3892: SIP Referred-By Mechanism
  • RFC 4028: Session Timers in SIP
  • RFC 4235: BLF (SIP dialog event package, partial support)
  • RFC 4320: Actions Addressing Identified Issues with SIP’s Non-INVITE Transaction
  • RFC 4483: A Mechanism for Content Indirection in SIP Messages
  • RFC 4488: Suppression of SIP REFER Method Implicit Subscription
  • RFC 5589: SIP Call Control — Transfer
  • RFC 5922: Domain Certificates in the Session Initiation Protocol

SIP Extensions:

  • KPML (Cisco standard similar to DTMF + kpml event package)
  • Cisco server-side forwarding

SIMPLE (SIP Presence), PUBLISH (part of SIMPLE)

  • RFC 2278: A Model for Presence and Instant Messaging
  • RFC 2779: Instant Messaging / Presence Protocol Requirements
  • RFC 3856: A Presence Event Package for SIP
  • RFC 3857: A Watcher Information Event Template-Package for SIP
  • RFC 3859: Common Profile for Presence
  • RFC 3863: PIDF: Presence Information Data Format
  • RFC 3903: SIP Extension for Event State Publication
  • RFC 4479: A Data Model for Presence
  • RFC 4827: XCAP Usage for Manipulating Presence Document Contents
  • RFC 5025: Presence Authorization Rules

SDP

  • RFC 2327: SDP: Session Description Protocol
  • RFC 3264: An Offer/Answer Model with SDP
  • RFC 4566: SDP: Session Description Protocol

RTP

  • RFC 1889: RTP: A Transport Protocol for Real-Time Applications obsolete
  • RFC 2429: RTP Payload Format for the 1998 Version of ITU-T Rec. H.263 Video H.263
  • RFC 2435: RTP MJPEG, RTP Payload Format for JPEG
  • RFC 2833: RTP Payload for DTMF Digits, Telephony Tones and Telephony Signals
  • RFC 3550: RTP: Real-Time Protocol
  • RFC 3551: RTP/AVP (audio and video profile)
  • RFC 3555: RTP Payload Formats
  • RFC 3952: RTP Payload Format for iLBC Speech
  • RFC 4629: H.263 RTP Payload Format
  • RFC 4733: RTP Payload for DTMF Digits, Telephony Tones, and Telephony Signals
  • RFC 5574: RTP Payload Format for the Speex Codec

SRTP

RFC 4568: SDES: SDP Security Descriptions for Media Streams

ZRTP

RFC 6189: ZRTP: Media Path Key Agreement for Unicast Secure RTP

IAX2

  • RFC 5456: IAX2
  • RFC 5467: IAX2 IANA Considerations for IAX

STUN

RFC 3489: STUN Simple Traversal of UDP Through NATs

UDPTL ( ITU T.38 Fax )

Call events options:

Enable call recording for all calls

Work in a customer support, a call center or service provider environment? You need to keep customer satisfaction in great quality, and even make it better? Enabling this option allows you to record all calls automatically.

Custom directory for the call records, along with a custom filename

Set a custom path for all your call recordings. On top of that, you can also set how the filenames of these recordings will be stored. Choose the exact order of all variables, such as year, month, day etc.

On transfer request mode

Got an important call and don’t want to be bothered, or worst — accidentally transferred to another call? These options allow you to control precisely that — you can either make Zoiper accept or deny an incoming call transfer request.

Server-side auto answer option

If your office PBX or service provider supports auto answering, then you can enable this feature in the Automation settings menu.

Основные возможности

  • Обмен мгновенными сообщениями;
  • Высокое качество звонков (аудио, видео);
  • Отправка и прием факсов;
  • Возможность поставить статус отсутствия, приветствия и пр.;
  • Создание конференций;
  • Проверка обновлений;
  • История сообщений;
  • Настройка разрешения видео во время звонков;
  • Быстрый поиск в списке контактов.

Плюсы и минусы

Плюсы:

  • Возможность скачать программу бесплатно;
  • Русскоязычный интерфейс;
  • Запись звонков;
  • Импорт и синхронизация контактов из социальных сетей и почтовых клиентов;
  • Конфиденциальность разговоров за счет шифрования звонков.

Минусы:

  • Инструкция на английском языке;
  • Бесплатная версия приложения поддерживает только 2 параллельные линии;
  • Ограниченный функционал бесплатной версии;
  • Отправка изображений и факсов в бесплатной версии с водяным знаком программы.

Аналоги

Telegram – бесплатное, быстрое и безопасное приложение, разработанное для общения. Позволяет бесплатно отправлять другим пользователям голосовые и текстовые сообщения, файлы различного типа (фото, видео, документы, mp3 и др.). Telegram адаптирован для всех устройств – планшетов, ноутбуков, телефонов, компьютеров. А благодаря быстрой синхронизации, программу можно установить и использовать на всех имеющихся у пользователя гаджетах. Активация осуществляется через номер телефона, к которому и будет привязана учетная запись.

Viber – программа для бесплатного общения через Интернет. Данный мессенджер позволяет обмениваться мультимедийными файлами и сообщениями с другими пользователями. Более того, Viber позволяет осуществлять видеозвонки на другие мобильные устройства и компьютеры. Единственное требование для успешной работы приложения – быть подключенным к Интернету. Программа полностью бесплатна.

Skype – наиболее популярная программа для видеосвязи во всем мире. Возможности приложения включают следующие: голосовые звонки и видеозвонки HD-качества, демонстрация экрана собеседнику, создание текстового чата с десятками участников, пересылка файлов, видеочат и видеоконференция с несколькими участниками.

Принципы установки и использования

Сохранить установочный файл на свой ПК и разрешить программе внести изменения;

Кликнуть «Next»;

Принять условия пользовательского соглашения;

Выбрать необходимые компоненты;

Выбрать папку, в которую будет установлена программа и дождаться окончания установочного процесса;

Интерфейс программы;

Available for your everyday use of the phone

Mute early media (outgoing calls)

Talking on the phone constantly? Probably you’re going a little nuts over the annoying ringback tones that you hear every single time when you make a call? You don’t have to anymore.

Ring when talking (incoming calls)

Imagine the same situation, instead of calling out though you get multiple incoming calls all the time. Phone keeps ringing while you are in call? Countless ring-rings chiming in your ears? Yikes!

*Use Zoiper’s Ring when talking option in the settings to stop this simply annoying phone feature.

Ring through PC speaker & ringing device

Operating Zoiper for personal use? Such cases often indicate that you may not have your headset always on. No worries, with Ring through PC speaker, you can hear that someone’s calling even if you’re not on the computer or use a speakerphone device!

*Just don’t forget to turn the volume up to 11!

Overview

The structure of the API is based on one main interface named IZoiperPhone which provides the facilities to obtain and manage configuration (IZoiperConfig), account (IZoiperAccount), call (IZoiperCall) and contact (IZoiperContact) objects. A few helper interfaces are provided such as audio device configuration (IZoiperAudio), video device configuraion (IZoiperVideo), audio playback (IZoiperPlayback) and SIP headers reader (IZoiperHeader).

Along with that interfaces there is also an event callback interface (IZoiperEvents) that must be implemented from the client. It is used to get information about cetrain events tha happen in the phone such as incoming calls, account registration results, etc.

Installation

The API come as part of Zoiper executable (Zoiper.exe) as out-of-process COM server. As Zoiper usually comes with an installer the installer itself is responsible to register its COM object factory and type library in the Windows Registry.

In case that Zoiper is deployed without an installer the following command line parameters can be used :

  • /regserver — register Zoiper COM object factory and type library in the Windows Registry.
  • /unregserver — unregister Zoiper COM object factory and type library in the Windows Registry.
Note
The registration requires administrator privileges and registers its components for all users.

Member Function Documentation

void IZoiperCall::Accept ( )

Accept the call.

See Also
VARIANT_BOOL IZoiperCall::AttendedTransfer ( IZoiperCall *  call )

Make an attended transfer.

Tries to join the call with the call given as parameter. If it is successful this call will terminate.

Parameters
call reference to the second call object of the attended trasnfer.
Returns
it is set to true if the attended transfer has started successfully and false if it is not.
void IZoiperCall::Hang ( )

Ends the call.

Ends the current call causing onZoiperCallHang() event. If this method is used no other references to this call object should be made as it is going to be destroyed.

void IZoiperCall::Hold ( )

Holds the call.

If the call is the active call in the phone object, the active call will be set to NULL.

See Also
VARIANT_BOOL IZoiperCall::Record ( )

Start recording the call.

Starts to record the call to the destination folder specified in the property with name generated from the pattern specified the property. The recording file name could be obtained in the callback.

Returns
it is set to true if the recording has started successfully and false if it is not.
See Also
,
VARIANT_BOOL IZoiperCall::RecordStop ( )

Stop recording the call.

Returns
it is set to true if the recording has stopped successfully and false if there was an error.
See Also
,
void IZoiperCall::Reject ( )

Reject the call.

See Also
void IZoiperCall::SendDTMF ( BSTR  dtmf )

Send a DTMF sequence.

Parameters
dtmf could contain a single character or a sequence of characters to be converted into DTMF signals according to the property for the account, used for the call. The valid characters to be used in this parameter are : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, * and #
Note
The usage of the DTMF type DTMF_SIGNALLING_OUTBAND could result in slower sending of the DTMF signals, because it requires a confirmation to be received from the remote end.
void IZoiperCall::Transfer ( BSTR  phone )

Transfer a call.

Make an unattended (blind) transfer.

Parameters
phone a string with the phone number to transfer to.
void IZoiperCall::UnHold ( )

Unholds the call.

If there is an active call object in the phone it will be put on hold automatically and this call will become the active one. This method works in the same way as the SetActive() method.

See Also
void IZoiperCall::UpdateRecordingFileName ( )

Change the recording file name.

Forces a new file name for the recording to be generated and the current recording file to be renamed. It will reflect any changes to the parameters values specified in IZoiperConfig::RecordFilename.

See Also
,
void IZoiperCall::Video ( VARIANT_BOOL  video )

Enable video stream for the call.

Enable video mode for the call

Parameters
video specifies if the video has to be started or stopped.

How it works

When our server detects a registration is about to expire, a silent push notification will be sent to Zoiper, which will wake it up to re-register to the server, and afterwards to set it back to ‘sleep’.

Each registration requires up to 30 seconds of maximum power on the 3G/4G network (from the phone/device), resulting in a high battery drain. So the more time between registrations, the longer the battery life will be on users’ devices.

As Zoiper has a default re-registration time of one month (2 600 000 seconds), only one wakeup per month is necessary, leading to negligible battery consumption.

This of course assumes the fact that a user keep the app open, without force closing it, turning off or restarting the device.

 We encourage all SIP server administrators to allow Zoiper softphones to use very long re-registration times.

You can check an approximation of battery usage while in background in comparison to registration time:

Start modes

The phone can be started in two modes : normal (manual) mode and embedded mode. This modes are governed by the command line parameter /embedding.

In normal mode the phone is started without the /embedding command line and shows its user interface to the enduser.

In embedded mode the phone is started with the /embedding command line and will not show any user intreface to the enduser. By default the installer configures Windows COM engine to start the phone in emedded mode. In other words if there is a request to create ZoiperAPI object and the phone is not already started, the COM engine will start it in embedded mode.

NAT considerations

Some operators are enforcing low-reregistration times (less than 10 minutes) to keep NAT bindings open, to minimize failed incoming calls due to UDP NAT binding timeouts. 

This method is unreliable as many routers (e.g. Sonicewall) utilize a UDP timeout of 30 seconds.

reference: http://www.st.ewi.tudelft.nl/~lucia/publications/measurement_asci.pdf

Not only will it not work reliably, it will also lead to significant battery usage on mobile phones as shown in the graph above.

As the APNS and FCM notifications use TCP and are not impacted by the low UDP NAT timeouts, no mechanism is needed to keep the UDP NAT open for Zoiper clients.

If the SIP registrar does not allow separate re-registration times for Zoiper clients and legacy phones, we recommend increasing all re-registration times, and to use SIP keep alive packets or OPTION packets sent from either the phones or the SIP server to keep the UDP NAT bindings alive for the legacy phones.

Our proxy server will acknowledge those keep alive packets locally, without waking up the phones.

Property Documentation

IZoiperAccount IZoiperCall::Account
get

Specifies a reference to the account object used for the call.

VARIANT_BOOL IZoiperCall::Conference
getset

Puts the call in and out of conference.

Zoiper supports only one conference at a given time. If the property is set to true, the call will join the conference. If it is false the call will leave the conference. Read this property to get information whether the call is in conference or not.

IZoiperContact IZoiperCall::Contact
get

The property will get a reference to the Contact object used for the call.

The property will get a reference to the contact object used for the call. When a phone is dialed, Zoiper tries to match the phone number to a contact from the phonebook. If there is one the phone will assign this property to the found contact. If there is no matching contact, a temporary one will be created for the call.

BSTR IZoiperCall::CurrentCodec
get

Specifies the used codec.

The property stores the codec used for the call. Possible values are :

  • u-law — G.711 u-law
  • GSM — GSM
  • a-law — G.711 a-law
  • G729 — G.729
  • Speex — Speex narrowband
  • iLBC 30 — iLBC 30ms frames
  • iLBC 20 — iLBC 20ms frames
BSTR IZoiperCall::DNID
get

Specifies the DNID.

The property will get the Dialed Number Identifier (DNID) (the number that the other end has dialed to make the call) in case of incoming calls.

BSTR IZoiperCall::Duration
get

Specifies the call duration in seconds.

In case of incoming call that is not picked up yet, it will be setto the duration of the ringing. When the call is answered the property is reset to zero and start the count again but this time for the call itself.

VARIANT_BOOL IZoiperCall::IsHold
get

Specifies if the call is put on hold.

VARIANT_BOOL IZoiperCall::IsIncoming
get

Specifies if the call is incoming.

VARIANT_BOOL IZoiperCall::IsRecording
get

Indicates if the call is being recorded.

VARIANT_BOOL IZoiperCall::IsRemoteHold
get

Specifies if the remote side has put the call on hold.

VARIANT_BOOL IZoiperCall::IsRinging
get

Specifies if the call is ringing.

VARIANT_BOOL IZoiperCall::IsTransferring
get

Specifies if the call is transferring.

BSTR IZoiperCall::Phone
get

Specifies the phone number.

The property will hold the caller identification name (CID) in case of incoming call. The property will hold the dialed number in case of outgoing call.

BSTR IZoiperCall::RecordingFileName
get

Specifies the current recording file name.

This property is used if the call is recorded.

Note
The properties in the file name will be replaced with their corresponding values. The file name can be changed on the fly by using custom properties in the initial recording file name pattern and the UpdateRecordingFilename() method.

Introduction and background info

Due to recent changes on the iOS and Android operating systems, incoming calls on Zoiper no longer work reliably in background under any set of conditions  used up until now.

On iOS this is due to the deprecation of VoIP sockets, while recent Android powered phones restrict how often apps can wake up while in background.

The only way to have reliable incoming calls is by using Firebase Cloud Messaging (FCM) on Android and APNS on iOS.

Due to technical limitations on both platforms involving matching certificates between client and server, it is impossible for a VoIP operator to add a notification server to their existing network without having a custom application linked to their server.

The standard approach as implemented by competing softphones, is to upload the user credentials to an intermediate VoIP server which takes over the task of registering to the operator’s SIP server. This method requires storing all credentials in plaintext or with an easily reversible encryption.

Zoiper values extremely the security of our millions of users, and we deem storing all our users’ credentials on our servers irresponsible. 

To avoid such a scenario, Zoiper has spent the last year developing a novel approach to an intermediate notification server.

Under this scenario, all user registrations are routed through our server, and at no point in time does our server have access to the plaintext credentials.

Requirements

In order for you to use Zoiper mobile PUSH proxy services, make sure that your device of choice, either an iOS or an Android powered mobile phone or tablet, has public internet access to Apple’s and Google’s servers.

NOTE: For use of devices in a closed / private / restricted network, do please consult with the official guidelines from Apple and Google, found on their websites:

Apple — https://support.apple.com/en-us/HT203609

Google — https://firebase.google.com/docs/cloud-messaging/concept-options#ports_and_your_firewall

In addition to all of the above, the device(s) in use need to have unrestricted access to Zoiper’s proxy servers, otherwise the service will not work.

Make sure that your closed / private / restricted network allows Zoiper to reach our servers:

IP — 185.117.83.192/27 , port 443

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *