2022-01-01 13:38:12 +00:00
|
|
|
# Copyright (C) 2012-2022 Zammad Foundation, https://zammad-foundation.org/
|
2021-06-01 12:20:20 +00:00
|
|
|
|
2018-10-15 09:47:59 +00:00
|
|
|
require 'rails_helper'
|
|
|
|
|
|
|
|
RSpec.describe 'Integration Placetel', type: :request do
|
|
|
|
|
2020-06-19 09:17:18 +00:00
|
|
|
let(:agent) do
|
|
|
|
create(:agent)
|
2018-10-15 09:47:59 +00:00
|
|
|
end
|
2020-06-19 09:17:18 +00:00
|
|
|
let!(:customer1) do
|
2018-10-15 09:47:59 +00:00
|
|
|
create(
|
2020-06-19 09:17:18 +00:00
|
|
|
:customer,
|
2018-12-19 17:31:51 +00:00
|
|
|
login: 'ticket-caller_id_cti-customer1@example.com',
|
2018-10-15 09:47:59 +00:00
|
|
|
firstname: 'CallerId',
|
2018-12-19 17:31:51 +00:00
|
|
|
lastname: 'Customer1',
|
|
|
|
phone: '+49 99999 222222',
|
|
|
|
fax: '+49 99999 222223',
|
|
|
|
mobile: '+01114100300',
|
|
|
|
note: 'Phone at home: +49 99999 222224',
|
2018-10-15 09:47:59 +00:00
|
|
|
)
|
|
|
|
end
|
2020-06-19 09:17:18 +00:00
|
|
|
let!(:customer2) do
|
2018-10-15 09:47:59 +00:00
|
|
|
create(
|
2020-06-19 09:17:18 +00:00
|
|
|
:customer,
|
2018-12-19 17:31:51 +00:00
|
|
|
login: 'ticket-caller_id_cti-customer2@example.com',
|
2018-10-15 09:47:59 +00:00
|
|
|
firstname: 'CallerId',
|
2018-12-19 17:31:51 +00:00
|
|
|
lastname: 'Customer2',
|
|
|
|
phone: '+49 99999 222222 2',
|
2018-10-15 09:47:59 +00:00
|
|
|
)
|
|
|
|
end
|
2020-06-19 09:17:18 +00:00
|
|
|
let!(:customer3) do
|
2018-10-15 09:47:59 +00:00
|
|
|
create(
|
2020-06-19 09:17:18 +00:00
|
|
|
:customer,
|
2018-12-19 17:31:51 +00:00
|
|
|
login: 'ticket-caller_id_cti-customer3@example.com',
|
2018-10-15 09:47:59 +00:00
|
|
|
firstname: 'CallerId',
|
2018-12-19 17:31:51 +00:00
|
|
|
lastname: 'Customer3',
|
|
|
|
phone: '+49 99999 222222 2',
|
2018-10-15 09:47:59 +00:00
|
|
|
)
|
|
|
|
end
|
|
|
|
|
2019-04-15 01:41:17 +00:00
|
|
|
before do
|
2018-10-15 09:47:59 +00:00
|
|
|
Cti::Log.destroy_all
|
|
|
|
|
|
|
|
Setting.set('placetel_integration', true)
|
|
|
|
Setting.set('placetel_config', {
|
|
|
|
outbound: {
|
2018-12-19 17:31:51 +00:00
|
|
|
routing_table: [
|
2018-10-15 09:47:59 +00:00
|
|
|
{
|
2018-12-19 17:31:51 +00:00
|
|
|
dest: '41*',
|
2018-10-15 09:47:59 +00:00
|
|
|
caller_id: '41715880339000',
|
|
|
|
},
|
|
|
|
{
|
2018-12-19 17:31:51 +00:00
|
|
|
dest: '491714000000',
|
2018-10-15 09:47:59 +00:00
|
|
|
caller_id: '41715880339000',
|
|
|
|
},
|
|
|
|
],
|
|
|
|
default_caller_id: '4930777000000',
|
|
|
|
},
|
2018-12-19 17:31:51 +00:00
|
|
|
inbound: {
|
2018-10-15 09:47:59 +00:00
|
|
|
block_caller_ids: [
|
|
|
|
{
|
|
|
|
caller_id: '491715000000',
|
2018-12-19 17:31:51 +00:00
|
|
|
note: 'some note',
|
2018-10-15 09:47:59 +00:00
|
|
|
}
|
|
|
|
],
|
2018-12-19 17:31:51 +00:00
|
|
|
notify_user_ids: {
|
2018-10-15 09:47:59 +00:00
|
|
|
2 => true,
|
|
|
|
4 => false,
|
|
|
|
},
|
|
|
|
}
|
|
|
|
})
|
|
|
|
|
|
|
|
Cti::CallerId.rebuild
|
|
|
|
end
|
|
|
|
|
|
|
|
describe 'request handling' do
|
|
|
|
|
|
|
|
it 'does token check' do
|
|
|
|
params = 'event=IncomingCall&from=01114100300&to=030600000000&call_id=4991155921769858278-1'
|
|
|
|
post '/api/v1/placetel/not_existing_token', params: params
|
2019-04-15 01:41:17 +00:00
|
|
|
expect(response).to have_http_status(:unauthorized)
|
2018-10-15 09:47:59 +00:00
|
|
|
|
|
|
|
error = nil
|
|
|
|
local_response = REXML::Document.new(response.body)
|
|
|
|
local_response.elements.each('Response/Error') do |element|
|
|
|
|
error = element.text
|
|
|
|
end
|
|
|
|
expect(error).to eq('Invalid token, please contact your admin!')
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'does basic call' do
|
|
|
|
token = Setting.get('placetel_token')
|
|
|
|
|
|
|
|
# inbound - I
|
|
|
|
params = 'event=IncomingCall&from=01114100300&to=030600000000&call_id=4991155921769858278-1'
|
|
|
|
post "/api/v1/placetel/#{token}", params: params
|
2019-04-15 01:41:17 +00:00
|
|
|
expect(response).to have_http_status(:ok)
|
2018-10-15 09:47:59 +00:00
|
|
|
|
|
|
|
local_response = REXML::Document.new(response.body)
|
|
|
|
expect(local_response.elements.count).to eq(1)
|
|
|
|
expect(local_response.elements.first.to_s).to eq('<Response/>')
|
|
|
|
|
|
|
|
# inbound - II - block caller
|
|
|
|
params = 'event=IncomingCall&from=491715000000&to=030600000000&call_id=4991155921769858278-2'
|
|
|
|
post "/api/v1/placetel/#{token}", params: params
|
2019-04-15 01:41:17 +00:00
|
|
|
expect(response).to have_http_status(:ok)
|
2018-10-15 09:47:59 +00:00
|
|
|
|
|
|
|
local_response = REXML::Document.new(response.body)
|
|
|
|
reason = nil
|
|
|
|
local_response.elements.each('Response/Reject') do |element|
|
|
|
|
reason = element.attributes['reason']
|
|
|
|
end
|
|
|
|
expect(reason).to eq('busy')
|
|
|
|
|
|
|
|
# outbound - I - set default_caller_id
|
2019-08-16 12:10:36 +00:00
|
|
|
params = 'event=OutgoingCall&direction=out&from=030600000000&to=01114100300&call_id=8621106404543334274-3'
|
2018-10-15 09:47:59 +00:00
|
|
|
post "/api/v1/placetel/#{token}", params: params
|
2019-04-15 01:41:17 +00:00
|
|
|
expect(response).to have_http_status(:ok)
|
2018-10-15 09:47:59 +00:00
|
|
|
|
|
|
|
caller_id = nil
|
|
|
|
number_to_dail = nil
|
|
|
|
lcoal_response = REXML::Document.new(response.body)
|
|
|
|
lcoal_response.elements.each('Response/Dial') do |element|
|
|
|
|
caller_id = element.attributes['callerId']
|
|
|
|
end
|
|
|
|
lcoal_response.elements.each('Response/Dial/Number') do |element|
|
|
|
|
number_to_dail = element.text
|
|
|
|
end
|
|
|
|
expect(caller_id).to eq('4930777000000')
|
|
|
|
expect(number_to_dail).to eq('01114100300')
|
|
|
|
|
|
|
|
# outbound - II - set caller_id based on routing_table by explicite number
|
2019-08-16 12:10:36 +00:00
|
|
|
params = 'event=OutgoingCall&direction=out&from=030600000000&to=491714000000&call_id=8621106404543334274-4'
|
2018-10-15 09:47:59 +00:00
|
|
|
post "/api/v1/placetel/#{token}", params: params
|
2019-04-15 01:41:17 +00:00
|
|
|
expect(response).to have_http_status(:ok)
|
2018-10-15 09:47:59 +00:00
|
|
|
|
|
|
|
caller_id = nil
|
|
|
|
number_to_dail = nil
|
|
|
|
lcoal_response = REXML::Document.new(response.body)
|
|
|
|
lcoal_response.elements.each('Response/Dial') do |element|
|
|
|
|
caller_id = element.attributes['callerId']
|
|
|
|
end
|
|
|
|
lcoal_response.elements.each('Response/Dial/Number') do |element|
|
|
|
|
number_to_dail = element.text
|
|
|
|
end
|
|
|
|
expect(caller_id).to eq('41715880339000')
|
|
|
|
expect(number_to_dail).to eq('491714000000')
|
|
|
|
|
|
|
|
# outbound - III - set caller_id based on routing_table by 41*
|
2019-08-16 12:10:36 +00:00
|
|
|
params = 'event=OutgoingCall&direction=out&from=030600000000&to=4147110000000&call_id=8621106404543334274-5'
|
2018-10-15 09:47:59 +00:00
|
|
|
post "/api/v1/placetel/#{token}", params: params
|
2019-04-15 01:41:17 +00:00
|
|
|
expect(response).to have_http_status(:ok)
|
2018-10-15 09:47:59 +00:00
|
|
|
|
|
|
|
caller_id = nil
|
|
|
|
number_to_dail = nil
|
|
|
|
lcoal_response = REXML::Document.new(response.body)
|
|
|
|
lcoal_response.elements.each('Response/Dial') do |element|
|
|
|
|
caller_id = element.attributes['callerId']
|
|
|
|
end
|
|
|
|
lcoal_response.elements.each('Response/Dial/Number') do |element|
|
|
|
|
number_to_dail = element.text
|
|
|
|
end
|
|
|
|
expect(caller_id).to eq('41715880339000')
|
|
|
|
expect(number_to_dail).to eq('4147110000000')
|
|
|
|
|
|
|
|
# no config
|
|
|
|
Setting.set('placetel_config', {})
|
|
|
|
params = 'event=IncomingCall&from=01114100300&to=030600000000&call_id=4991155921769858278-6'
|
|
|
|
post "/api/v1/placetel/#{token}", params: params
|
2019-04-15 01:41:17 +00:00
|
|
|
expect(response).to have_http_status(:unprocessable_entity)
|
2018-10-15 09:47:59 +00:00
|
|
|
|
|
|
|
error = nil
|
|
|
|
local_response = REXML::Document.new(response.body)
|
|
|
|
local_response.elements.each('Response/Error') do |element|
|
|
|
|
error = element.text
|
|
|
|
end
|
|
|
|
expect(error).to eq('Feature not configured, please contact your admin!')
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'does log call' do
|
|
|
|
token = Setting.get('placetel_token')
|
|
|
|
|
|
|
|
# outbound - I - new call
|
2019-08-16 12:10:36 +00:00
|
|
|
params = 'event=OutgoingCall&direction=out&from=030600000000&to=01114100300&call_id=1234567890-1'
|
2018-10-15 09:47:59 +00:00
|
|
|
post "/api/v1/placetel/#{token}", params: params
|
2019-04-15 01:41:17 +00:00
|
|
|
expect(response).to have_http_status(:ok)
|
2018-10-15 09:47:59 +00:00
|
|
|
log = Cti::Log.find_by(call_id: '1234567890-1')
|
|
|
|
expect(log).to be_truthy
|
|
|
|
expect(log.from).to eq('4930777000000')
|
|
|
|
expect(log.to).to eq('01114100300')
|
|
|
|
expect(log.direction).to eq('out')
|
2018-10-30 16:00:33 +00:00
|
|
|
expect(log.from_comment).to eq(nil)
|
2018-10-15 09:47:59 +00:00
|
|
|
expect(log.to_comment).to eq('CallerId Customer1')
|
|
|
|
expect(log.comment).to be_nil
|
|
|
|
expect(log.state).to eq('newCall')
|
|
|
|
expect(log.done).to eq(true)
|
|
|
|
expect(log.initialized_at).to be_truthy
|
|
|
|
expect(log.start_at).to be_nil
|
|
|
|
expect(log.end_at).to be_nil
|
|
|
|
expect(log.duration_waiting_time).to be_nil
|
|
|
|
expect(log.duration_talking_time).to be_nil
|
|
|
|
|
2019-04-07 15:23:03 +00:00
|
|
|
travel 1.second
|
|
|
|
|
2018-10-15 09:47:59 +00:00
|
|
|
# outbound - I - hangup by agent
|
|
|
|
params = 'event=HungUp&call_id=1234567890-1&type=missed'
|
|
|
|
post "/api/v1/placetel/#{token}", params: params
|
2019-04-15 01:41:17 +00:00
|
|
|
expect(response).to have_http_status(:ok)
|
2018-10-15 09:47:59 +00:00
|
|
|
log = Cti::Log.find_by(call_id: '1234567890-1')
|
|
|
|
expect(log).to be_truthy
|
|
|
|
expect(log.from).to eq('4930777000000')
|
|
|
|
expect(log.to).to eq('01114100300')
|
|
|
|
expect(log.direction).to eq('out')
|
2018-10-30 16:00:33 +00:00
|
|
|
expect(log.from_comment).to eq(nil)
|
2018-10-15 09:47:59 +00:00
|
|
|
expect(log.to_comment).to eq('CallerId Customer1')
|
|
|
|
expect(log.comment).to eq('cancel')
|
|
|
|
expect(log.state).to eq('hangup')
|
|
|
|
expect(log.done).to eq(true)
|
|
|
|
expect(log.initialized_at).to be_truthy
|
|
|
|
expect(log.start_at).to be_nil
|
|
|
|
expect(log.end_at).to be_truthy
|
|
|
|
expect(log.duration_waiting_time).to be_truthy
|
|
|
|
expect(log.duration_talking_time).to be_nil
|
|
|
|
|
2019-04-07 15:23:03 +00:00
|
|
|
travel 1.second
|
|
|
|
|
2018-10-15 09:47:59 +00:00
|
|
|
# outbound - II - new call
|
2019-08-16 12:10:36 +00:00
|
|
|
params = 'event=OutgoingCall&direction=out&from=030600000000&to=01114100300&call_id=1234567890-2'
|
2018-10-15 09:47:59 +00:00
|
|
|
post "/api/v1/placetel/#{token}", params: params
|
2019-04-15 01:41:17 +00:00
|
|
|
expect(response).to have_http_status(:ok)
|
2018-10-15 09:47:59 +00:00
|
|
|
log = Cti::Log.find_by(call_id: '1234567890-2')
|
|
|
|
expect(log).to be_truthy
|
|
|
|
expect(log.from).to eq('4930777000000')
|
|
|
|
expect(log.to).to eq('01114100300')
|
|
|
|
expect(log.direction).to eq('out')
|
2018-10-30 16:00:33 +00:00
|
|
|
expect(log.from_comment).to eq(nil)
|
2018-10-15 09:47:59 +00:00
|
|
|
expect(log.to_comment).to eq('CallerId Customer1')
|
|
|
|
expect(log.comment).to be_nil
|
|
|
|
expect(log.state).to eq('newCall')
|
|
|
|
expect(log.done).to eq(true)
|
|
|
|
expect(log.initialized_at).to be_truthy
|
|
|
|
expect(log.start_at).to be_nil
|
|
|
|
expect(log.end_at).to be_nil
|
|
|
|
expect(log.duration_waiting_time).to be_nil
|
|
|
|
expect(log.duration_talking_time).to be_nil
|
|
|
|
|
2019-04-07 15:23:03 +00:00
|
|
|
travel 1.second
|
|
|
|
|
2018-10-15 09:47:59 +00:00
|
|
|
# outbound - II - answer by customer
|
|
|
|
params = 'event=CallAccepted&call_id=1234567890-2&from=030600000000&to=01114100300'
|
|
|
|
post "/api/v1/placetel/#{token}", params: params
|
2019-04-15 01:41:17 +00:00
|
|
|
expect(response).to have_http_status(:ok)
|
2018-10-15 09:47:59 +00:00
|
|
|
log = Cti::Log.find_by(call_id: '1234567890-2')
|
|
|
|
expect(log).to be_truthy
|
|
|
|
expect(log.from).to eq('4930777000000')
|
|
|
|
expect(log.to).to eq('01114100300')
|
|
|
|
expect(log.direction).to eq('out')
|
2018-10-30 16:00:33 +00:00
|
|
|
expect(log.from_comment).to eq(nil)
|
2018-10-15 09:47:59 +00:00
|
|
|
expect(log.to_comment).to eq('CallerId Customer1')
|
|
|
|
expect(log.comment).to be_nil
|
|
|
|
expect(log.state).to eq('answer')
|
|
|
|
expect(log.done).to eq(true)
|
|
|
|
expect(log.initialized_at).to be_truthy
|
|
|
|
expect(log.start_at).to be_truthy
|
|
|
|
expect(log.end_at).to be_nil
|
|
|
|
expect(log.duration_waiting_time).to be_truthy
|
|
|
|
expect(log.duration_talking_time).to be_nil
|
|
|
|
|
2019-04-07 15:23:03 +00:00
|
|
|
travel 1.second
|
|
|
|
|
2018-10-15 09:47:59 +00:00
|
|
|
# outbound - II - hangup by customer
|
|
|
|
params = 'event=HungUp&call_id=1234567890-2&type=accepted&from=030600000000&to=01114100300'
|
|
|
|
post "/api/v1/placetel/#{token}", params: params
|
2019-04-15 01:41:17 +00:00
|
|
|
expect(response).to have_http_status(:ok)
|
2018-10-15 09:47:59 +00:00
|
|
|
log = Cti::Log.find_by(call_id: '1234567890-2')
|
|
|
|
expect(log).to be_truthy
|
|
|
|
expect(log.from).to eq('4930777000000')
|
|
|
|
expect(log.to).to eq('01114100300')
|
|
|
|
expect(log.direction).to eq('out')
|
2018-10-30 16:00:33 +00:00
|
|
|
expect(log.from_comment).to eq(nil)
|
2018-10-15 09:47:59 +00:00
|
|
|
expect(log.to_comment).to eq('CallerId Customer1')
|
|
|
|
expect(log.comment).to eq('normalClearing')
|
|
|
|
expect(log.state).to eq('hangup')
|
|
|
|
expect(log.done).to eq(true)
|
|
|
|
expect(log.initialized_at).to be_truthy
|
|
|
|
expect(log.start_at).to be_truthy
|
|
|
|
expect(log.end_at).to be_truthy
|
|
|
|
expect(log.duration_waiting_time).to be_truthy
|
|
|
|
expect(log.duration_talking_time).to be_truthy
|
|
|
|
|
2019-04-07 15:23:03 +00:00
|
|
|
travel 1.second
|
|
|
|
|
2018-10-15 09:47:59 +00:00
|
|
|
# inbound - I - new call
|
|
|
|
params = 'event=IncomingCall&to=030600000000&from=01114100300&call_id=1234567890-3'
|
|
|
|
post "/api/v1/placetel/#{token}", params: params
|
2019-04-15 01:41:17 +00:00
|
|
|
expect(response).to have_http_status(:ok)
|
2018-10-15 09:47:59 +00:00
|
|
|
log = Cti::Log.find_by(call_id: '1234567890-3')
|
|
|
|
expect(log).to be_truthy
|
|
|
|
expect(log.to).to eq('030600000000')
|
|
|
|
expect(log.from).to eq('01114100300')
|
|
|
|
expect(log.direction).to eq('in')
|
2018-10-30 16:00:33 +00:00
|
|
|
expect(log.to_comment).to eq(nil)
|
2018-10-15 09:47:59 +00:00
|
|
|
expect(log.from_comment).to eq('CallerId Customer1')
|
|
|
|
expect(log.comment).to be_nil
|
|
|
|
expect(log.state).to eq('newCall')
|
|
|
|
expect(log.done).to eq(false)
|
|
|
|
expect(log.initialized_at).to be_truthy
|
|
|
|
expect(log.start_at).to be_nil
|
|
|
|
expect(log.end_at).to be_nil
|
|
|
|
expect(log.duration_waiting_time).to be_nil
|
|
|
|
expect(log.duration_talking_time).to be_nil
|
|
|
|
|
2019-04-07 15:23:03 +00:00
|
|
|
travel 1.second
|
|
|
|
|
2018-10-15 09:47:59 +00:00
|
|
|
# inbound - I - answer by customer
|
|
|
|
params = 'event=CallAccepted&call_id=1234567890-3&to=030600000000&from=01114100300'
|
|
|
|
post "/api/v1/placetel/#{token}", params: params
|
2019-04-15 01:41:17 +00:00
|
|
|
expect(response).to have_http_status(:ok)
|
2018-10-15 09:47:59 +00:00
|
|
|
log = Cti::Log.find_by(call_id: '1234567890-3')
|
|
|
|
expect(log).to be_truthy
|
|
|
|
expect(log.to).to eq('030600000000')
|
|
|
|
expect(log.from).to eq('01114100300')
|
|
|
|
expect(log.direction).to eq('in')
|
2018-10-30 16:00:33 +00:00
|
|
|
expect(log.to_comment).to eq(nil)
|
2018-10-15 09:47:59 +00:00
|
|
|
expect(log.from_comment).to eq('CallerId Customer1')
|
|
|
|
expect(log.comment).to be_nil
|
|
|
|
expect(log.state).to eq('answer')
|
|
|
|
expect(log.done).to eq(true)
|
|
|
|
expect(log.initialized_at).to be_truthy
|
|
|
|
expect(log.start_at).to be_truthy
|
|
|
|
expect(log.end_at).to be_nil
|
|
|
|
expect(log.duration_waiting_time).to be_truthy
|
|
|
|
expect(log.duration_talking_time).to be_nil
|
|
|
|
|
2019-04-07 15:23:03 +00:00
|
|
|
travel 1.second
|
|
|
|
|
2018-10-15 09:47:59 +00:00
|
|
|
# inbound - I - hangup by customer
|
|
|
|
params = 'event=HungUp&call_id=1234567890-3&type=accepted&to=030600000000&from=01114100300'
|
|
|
|
post "/api/v1/placetel/#{token}", params: params
|
2019-04-15 01:41:17 +00:00
|
|
|
expect(response).to have_http_status(:ok)
|
2018-10-15 09:47:59 +00:00
|
|
|
log = Cti::Log.find_by(call_id: '1234567890-3')
|
|
|
|
expect(log).to be_truthy
|
|
|
|
expect(log.to).to eq('030600000000')
|
|
|
|
expect(log.from).to eq('01114100300')
|
|
|
|
expect(log.direction).to eq('in')
|
2018-10-30 16:00:33 +00:00
|
|
|
expect(log.to_comment).to eq(nil)
|
2018-10-15 09:47:59 +00:00
|
|
|
expect(log.from_comment).to eq('CallerId Customer1')
|
|
|
|
expect(log.comment).to eq('normalClearing')
|
|
|
|
expect(log.state).to eq('hangup')
|
|
|
|
expect(log.done).to eq(true)
|
|
|
|
expect(log.initialized_at).to be_truthy
|
|
|
|
expect(log.start_at).to be_truthy
|
|
|
|
expect(log.end_at).to be_truthy
|
|
|
|
expect(log.duration_waiting_time).to be_truthy
|
|
|
|
expect(log.duration_talking_time).to be_truthy
|
|
|
|
|
2019-04-07 15:23:03 +00:00
|
|
|
travel 1.second
|
|
|
|
|
2018-10-15 09:47:59 +00:00
|
|
|
# inbound - II - new call
|
|
|
|
params = 'event=IncomingCall&to=030600000000&from=01114100300&call_id=1234567890-4'
|
|
|
|
post "/api/v1/placetel/#{token}", params: params
|
2019-04-15 01:41:17 +00:00
|
|
|
expect(response).to have_http_status(:ok)
|
2018-10-15 09:47:59 +00:00
|
|
|
log = Cti::Log.find_by(call_id: '1234567890-4')
|
|
|
|
expect(log).to be_truthy
|
|
|
|
expect(log.to).to eq('030600000000')
|
|
|
|
expect(log.from).to eq('01114100300')
|
|
|
|
expect(log.direction).to eq('in')
|
2018-10-30 16:00:33 +00:00
|
|
|
expect(log.to_comment).to eq(nil)
|
2018-10-15 09:47:59 +00:00
|
|
|
expect(log.from_comment).to eq('CallerId Customer1')
|
|
|
|
expect(log.comment).to be_nil
|
|
|
|
expect(log.state).to eq('newCall')
|
|
|
|
expect(log.done).to eq(false)
|
|
|
|
expect(log.initialized_at).to be_truthy
|
|
|
|
expect(log.start_at).to be_nil
|
|
|
|
expect(log.end_at).to be_nil
|
|
|
|
expect(log.duration_waiting_time).to be_nil
|
|
|
|
expect(log.duration_talking_time).to be_nil
|
|
|
|
|
2019-04-07 15:23:03 +00:00
|
|
|
travel 1.second
|
|
|
|
|
2018-10-15 09:47:59 +00:00
|
|
|
# inbound - II - answer by voicemail
|
|
|
|
params = 'event=CallAccepted&call_id=1234567890-4&to=030600000000&from=01114100300&user=voicemail'
|
|
|
|
post "/api/v1/placetel/#{token}", params: params
|
2019-04-15 01:41:17 +00:00
|
|
|
expect(response).to have_http_status(:ok)
|
2018-10-15 09:47:59 +00:00
|
|
|
log = Cti::Log.find_by(call_id: '1234567890-4')
|
|
|
|
expect(log).to be_truthy
|
|
|
|
expect(log.to).to eq('030600000000')
|
|
|
|
expect(log.from).to eq('01114100300')
|
|
|
|
expect(log.direction).to eq('in')
|
|
|
|
expect(log.to_comment).to eq('voicemail')
|
|
|
|
expect(log.from_comment).to eq('CallerId Customer1')
|
|
|
|
expect(log.comment).to be_nil
|
|
|
|
expect(log.state).to eq('answer')
|
|
|
|
expect(log.done).to eq(true)
|
|
|
|
expect(log.initialized_at).to be_truthy
|
|
|
|
expect(log.start_at).to be_truthy
|
|
|
|
expect(log.end_at).to be_nil
|
|
|
|
expect(log.duration_waiting_time).to be_truthy
|
|
|
|
expect(log.duration_talking_time).to be_nil
|
|
|
|
|
2019-04-07 15:23:03 +00:00
|
|
|
travel 1.second
|
|
|
|
|
2018-10-15 09:47:59 +00:00
|
|
|
# inbound - II - hangup by customer
|
|
|
|
params = 'event=HungUp&call_id=1234567890-4&type=accepted&to=030600000000&from=01114100300'
|
|
|
|
post "/api/v1/placetel/#{token}", params: params
|
2019-04-15 01:41:17 +00:00
|
|
|
expect(response).to have_http_status(:ok)
|
2018-10-15 09:47:59 +00:00
|
|
|
log = Cti::Log.find_by(call_id: '1234567890-4')
|
|
|
|
expect(log).to be_truthy
|
|
|
|
expect(log.to).to eq('030600000000')
|
|
|
|
expect(log.from).to eq('01114100300')
|
|
|
|
expect(log.direction).to eq('in')
|
|
|
|
expect(log.to_comment).to eq('voicemail')
|
|
|
|
expect(log.from_comment).to eq('CallerId Customer1')
|
|
|
|
expect(log.comment).to eq('normalClearing')
|
|
|
|
expect(log.state).to eq('hangup')
|
|
|
|
expect(log.done).to eq(false)
|
|
|
|
expect(log.initialized_at).to be_truthy
|
|
|
|
expect(log.start_at).to be_truthy
|
|
|
|
expect(log.end_at).to be_truthy
|
|
|
|
expect(log.duration_waiting_time).to be_truthy
|
|
|
|
expect(log.duration_talking_time).to be_truthy
|
|
|
|
|
2019-04-07 15:23:03 +00:00
|
|
|
travel 1.second
|
|
|
|
|
2018-10-15 09:47:59 +00:00
|
|
|
# inbound - III - new call
|
|
|
|
params = 'event=IncomingCall&to=030600000000&from=01114100300&call_id=1234567890-5'
|
|
|
|
post "/api/v1/placetel/#{token}", params: params
|
2019-04-15 01:41:17 +00:00
|
|
|
expect(response).to have_http_status(:ok)
|
2018-10-15 09:47:59 +00:00
|
|
|
log = Cti::Log.find_by(call_id: '1234567890-5')
|
|
|
|
expect(log).to be_truthy
|
|
|
|
expect(log.to).to eq('030600000000')
|
|
|
|
expect(log.from).to eq('01114100300')
|
|
|
|
expect(log.direction).to eq('in')
|
2018-10-30 16:00:33 +00:00
|
|
|
expect(log.to_comment).to eq(nil)
|
2018-10-15 09:47:59 +00:00
|
|
|
expect(log.from_comment).to eq('CallerId Customer1')
|
|
|
|
expect(log.comment).to be_nil
|
|
|
|
expect(log.state).to eq('newCall')
|
|
|
|
expect(log.done).to eq(false)
|
|
|
|
expect(log.initialized_at).to be_truthy
|
|
|
|
expect(log.start_at).to be_nil
|
|
|
|
expect(log.end_at).to be_nil
|
|
|
|
expect(log.duration_waiting_time).to be_nil
|
|
|
|
expect(log.duration_talking_time).to be_nil
|
|
|
|
|
2019-04-07 15:23:03 +00:00
|
|
|
travel 1.second
|
|
|
|
|
2018-10-15 09:47:59 +00:00
|
|
|
# inbound - III - hangup by customer
|
|
|
|
params = 'event=HungUp&call_id=1234567890-5&type=accepted&to=030600000000&from=01114100300'
|
|
|
|
post "/api/v1/placetel/#{token}", params: params
|
2019-04-15 01:41:17 +00:00
|
|
|
expect(response).to have_http_status(:ok)
|
2018-10-15 09:47:59 +00:00
|
|
|
log = Cti::Log.find_by(call_id: '1234567890-5')
|
|
|
|
expect(log).to be_truthy
|
|
|
|
expect(log.to).to eq('030600000000')
|
|
|
|
expect(log.from).to eq('01114100300')
|
|
|
|
expect(log.direction).to eq('in')
|
2018-10-30 16:00:33 +00:00
|
|
|
expect(log.to_comment).to eq(nil)
|
2018-10-15 09:47:59 +00:00
|
|
|
expect(log.from_comment).to eq('CallerId Customer1')
|
|
|
|
expect(log.comment).to eq('normalClearing')
|
|
|
|
expect(log.state).to eq('hangup')
|
|
|
|
expect(log.done).to eq(false)
|
|
|
|
expect(log.initialized_at).to be_truthy
|
|
|
|
expect(log.start_at).to be_nil
|
|
|
|
expect(log.end_at).to be_truthy
|
|
|
|
expect(log.duration_waiting_time).to be_truthy
|
|
|
|
expect(log.duration_talking_time).to be_nil
|
|
|
|
|
2019-04-07 15:23:03 +00:00
|
|
|
travel 1.second
|
|
|
|
|
2018-10-15 09:47:59 +00:00
|
|
|
# inbound - IV - new call
|
|
|
|
params = 'event=IncomingCall&to=030600000000&from=49999992222222&call_id=1234567890-6'
|
|
|
|
post "/api/v1/placetel/#{token}", params: params
|
2019-04-15 01:41:17 +00:00
|
|
|
expect(response).to have_http_status(:ok)
|
2018-10-15 09:47:59 +00:00
|
|
|
log = Cti::Log.find_by(call_id: '1234567890-6')
|
|
|
|
expect(log).to be_truthy
|
|
|
|
expect(log.to).to eq('030600000000')
|
|
|
|
expect(log.from).to eq('49999992222222')
|
|
|
|
expect(log.direction).to eq('in')
|
2018-10-30 16:00:33 +00:00
|
|
|
expect(log.to_comment).to eq(nil)
|
2018-10-15 09:47:59 +00:00
|
|
|
expect(log.from_comment).to eq('CallerId Customer3,CallerId Customer2')
|
|
|
|
expect(log.preferences['to']).to be_falsey
|
|
|
|
expect(log.preferences['from']).to be_truthy
|
|
|
|
expect(log.comment).to be_nil
|
|
|
|
expect(log.state).to eq('newCall')
|
|
|
|
expect(log.done).to eq(false)
|
|
|
|
expect(log.initialized_at).to be_truthy
|
|
|
|
expect(log.start_at).to be_nil
|
|
|
|
expect(log.end_at).to be_nil
|
|
|
|
expect(log.duration_waiting_time).to be_nil
|
|
|
|
expect(log.duration_talking_time).to be_nil
|
|
|
|
|
2019-04-07 15:23:03 +00:00
|
|
|
travel 1.second
|
|
|
|
|
2018-10-15 09:47:59 +00:00
|
|
|
# inbound - IV - new call
|
|
|
|
params = 'event=IncomingCall&to=030600000000&from=anonymous&call_id=1234567890-7'
|
|
|
|
post "/api/v1/placetel/#{token}", params: params
|
2019-04-15 01:41:17 +00:00
|
|
|
expect(response).to have_http_status(:ok)
|
2018-10-15 09:47:59 +00:00
|
|
|
log = Cti::Log.find_by(call_id: '1234567890-7')
|
|
|
|
expect(log).to be_truthy
|
|
|
|
expect(log.to).to eq('030600000000')
|
|
|
|
expect(log.from).to eq('anonymous')
|
|
|
|
expect(log.direction).to eq('in')
|
2018-10-30 16:00:33 +00:00
|
|
|
expect(log.to_comment).to eq(nil)
|
2018-10-15 09:47:59 +00:00
|
|
|
expect(log.from_comment).to be_nil
|
|
|
|
expect(log.preferences['to']).to be_falsey
|
|
|
|
expect(log.preferences['from']).to be_falsey
|
|
|
|
expect(log.comment).to be_nil
|
|
|
|
expect(log.state).to eq('newCall')
|
|
|
|
expect(log.done).to eq(false)
|
|
|
|
expect(log.initialized_at).to be_truthy
|
|
|
|
expect(log.start_at).to be_nil
|
|
|
|
expect(log.end_at).to be_nil
|
|
|
|
expect(log.duration_waiting_time).to be_nil
|
|
|
|
expect(log.duration_talking_time).to be_nil
|
|
|
|
|
|
|
|
# get caller list
|
|
|
|
get '/api/v1/cti/log'
|
2021-02-04 08:28:41 +00:00
|
|
|
expect(response).to have_http_status(:forbidden)
|
2018-10-15 09:47:59 +00:00
|
|
|
|
2020-06-19 09:17:18 +00:00
|
|
|
authenticated_as(agent)
|
2018-10-15 09:47:59 +00:00
|
|
|
get '/api/v1/cti/log', as: :json
|
2019-04-15 01:41:17 +00:00
|
|
|
expect(response).to have_http_status(:ok)
|
2018-10-15 09:47:59 +00:00
|
|
|
expect(json_response['list']).to be_a_kind_of(Array)
|
|
|
|
expect(json_response['list'].count).to eq(7)
|
|
|
|
expect(json_response['assets']).to be_truthy
|
|
|
|
expect(json_response['assets']['User']).to be_truthy
|
2020-06-19 09:17:18 +00:00
|
|
|
expect(json_response['assets']['User'][customer2.id.to_s]).to be_truthy
|
|
|
|
expect(json_response['assets']['User'][customer3.id.to_s]).to be_truthy
|
2018-10-15 09:47:59 +00:00
|
|
|
expect(json_response['list'][0]['call_id']).to eq('1234567890-7')
|
|
|
|
expect(json_response['list'][1]['call_id']).to eq('1234567890-6')
|
|
|
|
expect(json_response['list'][2]['call_id']).to eq('1234567890-5')
|
|
|
|
expect(json_response['list'][3]['call_id']).to eq('1234567890-4')
|
|
|
|
expect(json_response['list'][4]['call_id']).to eq('1234567890-3')
|
|
|
|
expect(json_response['list'][5]['call_id']).to eq('1234567890-2')
|
|
|
|
expect(json_response['list'][5]['state']).to eq('hangup')
|
|
|
|
expect(json_response['list'][5]['from']).to eq('4930777000000')
|
2018-10-30 16:00:33 +00:00
|
|
|
expect(json_response['list'][5]['from_comment']).to eq(nil)
|
2018-10-15 09:47:59 +00:00
|
|
|
expect(json_response['list'][5]['to']).to eq('01114100300')
|
|
|
|
expect(json_response['list'][5]['to_comment']).to eq('CallerId Customer1')
|
|
|
|
expect(json_response['list'][5]['comment']).to eq('normalClearing')
|
|
|
|
expect(json_response['list'][5]['state']).to eq('hangup')
|
|
|
|
expect(json_response['list'][6]['call_id']).to eq('1234567890-1')
|
|
|
|
end
|
2018-10-30 16:00:33 +00:00
|
|
|
|
|
|
|
it 'does log call with peer' do
|
|
|
|
token = Setting.get('placetel_token')
|
|
|
|
|
|
|
|
# outbound - I - new call
|
2019-08-16 12:10:36 +00:00
|
|
|
params = 'event=OutgoingCall&direction=out&from=030600000000&to=01114100300&call_id=1234567890-1&peer=something@example.com'
|
2018-10-30 16:00:33 +00:00
|
|
|
post "/api/v1/placetel/#{token}", params: params
|
2019-04-15 01:41:17 +00:00
|
|
|
expect(response).to have_http_status(:ok)
|
2018-10-30 16:00:33 +00:00
|
|
|
log = Cti::Log.find_by(call_id: '1234567890-1')
|
|
|
|
expect(log).to be_truthy
|
|
|
|
expect(log.from).to eq('4930777000000')
|
|
|
|
expect(log.to).to eq('01114100300')
|
|
|
|
expect(log.direction).to eq('out')
|
|
|
|
expect(log.from_comment).to eq(nil)
|
|
|
|
expect(log.to_comment).to eq('CallerId Customer1')
|
|
|
|
expect(log.comment).to be_nil
|
|
|
|
expect(log.state).to eq('newCall')
|
|
|
|
expect(log.done).to eq(true)
|
|
|
|
expect(log.initialized_at).to be_truthy
|
|
|
|
expect(log.start_at).to be_nil
|
|
|
|
expect(log.end_at).to be_nil
|
|
|
|
expect(log.duration_waiting_time).to be_nil
|
|
|
|
expect(log.duration_talking_time).to be_nil
|
|
|
|
|
|
|
|
config = Setting.get('placetel_config')
|
|
|
|
config[:api_token] = '123'
|
2019-08-16 12:10:36 +00:00
|
|
|
config[:outbound][:default_caller_id] = ''
|
2018-10-30 16:00:33 +00:00
|
|
|
Setting.set('placetel_config', config)
|
|
|
|
|
|
|
|
stub_request(:post, 'https://api.placetel.de/api/getVoIPUsers.json')
|
|
|
|
.to_return(status: 200, body: [{ 'callerid' => '03055571600', 'did' => 10, 'name' => 'Bob Smith', 'stype' => 3, 'uid' => '777008478072@example.com', 'uid2' => nil }, { 'callerid' => '03055571600', 'did' => 12, 'name' => 'Josef Müller', 'stype' => 3, 'uid' => '777042617425@example.com', 'uid2' => nil }].to_json)
|
|
|
|
|
2019-08-16 12:10:36 +00:00
|
|
|
params = 'event=OutgoingCall&direction=out&to=099999222222&call_id=1234567890-2&from=777008478072@example.com'
|
2018-10-30 16:00:33 +00:00
|
|
|
post "/api/v1/placetel/#{token}", params: params
|
2019-04-15 01:41:17 +00:00
|
|
|
expect(response).to have_http_status(:ok)
|
2018-10-30 16:00:33 +00:00
|
|
|
log = Cti::Log.find_by(call_id: '1234567890-2')
|
|
|
|
expect(log).to be_truthy
|
2019-08-16 12:10:36 +00:00
|
|
|
expect(log.from).to eq('777008478072@example.com')
|
|
|
|
expect(log.to).to eq('099999222222')
|
2018-10-30 16:00:33 +00:00
|
|
|
expect(log.direction).to eq('out')
|
|
|
|
expect(log.from_comment).to eq('Bob Smith')
|
|
|
|
expect(log.to_comment).to eq('CallerId Customer1')
|
|
|
|
expect(log.comment).to be_nil
|
|
|
|
expect(log.state).to eq('newCall')
|
|
|
|
expect(log.done).to eq(true)
|
|
|
|
expect(log.initialized_at).to be_truthy
|
|
|
|
expect(log.start_at).to be_nil
|
|
|
|
expect(log.end_at).to be_nil
|
|
|
|
expect(log.duration_waiting_time).to be_nil
|
|
|
|
expect(log.duration_talking_time).to be_nil
|
|
|
|
|
|
|
|
# check if cache is filled
|
2021-05-31 13:05:54 +00:00
|
|
|
expect(Cache.read('placetelGetVoipUsers')['777008478072@example.com']).to eq('Bob Smith')
|
2018-10-30 16:00:33 +00:00
|
|
|
|
2019-08-16 12:10:36 +00:00
|
|
|
params = 'event=IncomingCall&direction=in&to=030600000000&from=012345&call_id=1234567890-3&peer=777008478072@example.com'
|
|
|
|
post "/api/v1/placetel/#{token}", params: params
|
|
|
|
expect(response).to have_http_status(:ok)
|
|
|
|
log = Cti::Log.find_by(call_id: '1234567890-3')
|
|
|
|
expect(log).to be_truthy
|
|
|
|
expect(log.from).to eq('012345')
|
|
|
|
expect(log.to).to eq('030600000000')
|
|
|
|
expect(log.direction).to eq('in')
|
|
|
|
expect(log.from_comment).to eq(nil)
|
|
|
|
expect(log.to_comment).to eq('Bob Smith')
|
|
|
|
expect(log.comment).to be_nil
|
|
|
|
expect(log.state).to eq('newCall')
|
|
|
|
expect(log.done).to eq(false)
|
|
|
|
expect(log.initialized_at).to be_truthy
|
|
|
|
expect(log.start_at).to be_nil
|
|
|
|
expect(log.end_at).to be_nil
|
|
|
|
expect(log.duration_waiting_time).to be_nil
|
|
|
|
expect(log.duration_talking_time).to be_nil
|
|
|
|
|
|
|
|
# check if cache is filled
|
2021-05-31 13:05:54 +00:00
|
|
|
expect(Cache.read('placetelGetVoipUsers')['777008478072@example.com']).to eq('Bob Smith')
|
2018-10-30 16:00:33 +00:00
|
|
|
end
|
2018-10-15 09:47:59 +00:00
|
|
|
end
|
|
|
|
end
|