Softphone/API

De uTech Tecnologia
Ir para: navegação, pesquisa

Tabela de conteúdo


Sobre este Guia

Este guia descreve a interface CTI - Computer Telephony Integration do Servidor uTech

Comentários sobre este Guia

Você pode fornecer comentários sobre este documento, enviando e-mail para o seguinte endereço:

  • suporteutech@utech.com.br

Agradecemos seus comentários.

Visão Geral

Como funciona no Protocolo CTI uTech

O procoto CTI fornece uma interface entre Softphone e o aplicações CTI cliente.


  • A aplicação CTI envia comandos para o Softphone para gerar, atender (se não configurado com auto-atendimento), desviar, e desligar chamadas
  • O Softfone envia para a aplicação CTI eventos de chamadas efetuadas e recebidas.


Como conectar na API CTI do Softphone

O Softphone disponibiliza uma conexão TCP/IP, em porta configurada no menu Preferências, aba TAPI. Essa configuração possui, alem de uma porta onde o softphone irá esperar pela conexão do clinte, bom como um usuário e senha para a aplicação fazer login (Comando LOGIN).

Formato do Protocolo

O protocolo para comunicação com o Softphone é em formato TEXTO. Todos os campos pertencentes ao mesmo comando enviado ou evento recebido serão separados por ESPAÇO (0x20 em Hexadecimal). A aplicação CTI poderá receber vários eventos concatenados, que serão separados duas sequências dos caracteres CARRIAGE RETURN (CR) seguido de LINE FEED (LF) [ \r\n\r\n ou 0x0D + 0x0A + 0xAD + 0x0A em hexadecimal].

Exemplo de Evento recebido do Servidor CTI:

EVENTO CAMPO1:VALOR1 CAMPO2:VALOR2\r\n\r\n
CALL CALLID:1234567890 STATE:originated CALLING:2000 CALLED:2001\r\n\r\n

Conectado na API CTI do Softphone

A API do softphone utiliza o protocolo TCP e, por padrão, a porta 0000. Após conectar no endereço IP e Porta do Softphone, é necessário enviar o Comando LOGIN para autenticar a API. Após conectado e autenticado, a aplicação CTI começará a receber eventos do Softphone.

Comandos e Eventos

Abaixo é listado os eventos enviados pelo Softphone e os comandos disponíveis para a aplicação CTI. Em cada Comando/Evento contem uma breve descrição. Para maiores informações clique no link no sobre o Comando/Evento.

Comandos (Aplicação CTI -> Softphone)
Comando LOGIN Comando utilizado pela aplicação CTI para autenticar na API do Softphone. A aplicação DEVE fazer login para enviar comandos receber eventos.
Comando DIAL Comando enviado para o Servidor CTI solicitando a geração de chamadas.
Comando ANSWER Comando enviado pela aplicação CTI para atendimento de uma chamada.
Comando DROP Comando enviado pela aplicação CTI solicitando a rejeição ou para derrubar/desligar da chamada.
Comando HOLD Comando enviado pela aplicação CTI para solicitar que a chamada seja colocada em espera/musica.
Comando RETRIEVE Comando enviado pela aplicação CTI solicitado a remoção da chamada da espera/musica.
Eventos (Softphone -> Aplicação)
Evento CALL Evento enviado pelo Softphone para aplicação, informando novo evento de chamada.

Estados de uma Chamada

Lista de Estados de uma chamada

Causas de Desligamento da Chamada

Lista de Causas de desligamento de uma chamada

Exemplo em PHP

<?php
 
require 'vendor/autoload.php';
 
$api = array("connected" => false,
             "logged"    => false,
             "status"    => "idle",
             "user"      => "admin",
             "pass"      => "12345",
             "addr"      => "10.0.0.123",
             "port"      => "8000"
            );
 
$loop = React\EventLoop\Factory::create();
$connector = new React\Socket\Connector($loop,array('timeout' => 10.0));
$connector->connect("{$api['addr']}:{$api['port']}")->then(
    function (React\Socket\ConnectionInterface $connection) use ($loop, &$api){
 
        echo "connection successfully established\n";
        $api['connected'] = true;
 
        echo "Add Timer to call 1000....\n";
        $timer = $loop->addTimer(5, function () use ($connection, &$api) {
            if($api['logged'] == true) {
                echo "Dial to 1000...\n";
                $connection->write("DIAL TO:1000\r\n\r\n");
            } else {
                echo "CTI cli not logged!\n";
            }
        });
 
        $connection->on('data', function ($data) use (&$api) {
            echo "RECV:$data";
 
            if(strncmp($data, "LOGIN", 5) == 0){
                if(strstr($data, "RESP:OK")){ 
                    echo "Login OK\n";
                    $api['logged'] = true;
                } else
                    echo "Login Error!\n";
            }
        });
 
        $connection->on('end', function () {
            echo "Connection ended\n";
        });
 
        $connection->on('error', function (Exception $e) {
            echo 'Connection error: ' . $e->getMessage() . "\n";
        });
 
        $connection->on('close', function () {
            $api['connected'] = false;
            echo "Connection closed...\n";
        });
 
        if($api['connected'] == true) {
            if($api['logged'] == false) {
                echo "Send login ({$api['user']}, {$api['pass']})...\n";
                $connection->write("LOGIN USER:{$api['user']} PASSWORD:{$api['pass']}\r\n\r\n");
            } 
        }
 
    }, function (Exception $error) {
        echo "Failed to connect due to $error ????\n";
        exit(1);
    }
);
$loop->run();
 
?>




Voltar


Ferramentas pessoais
Espaços nominais

Variantes
Visualizações
Ações
Navegação
Ferramentas