show dolist logs to manager

This commit is contained in:
simon lehericey 2022-04-26 11:44:42 +02:00
parent aa0ef955d5
commit 14f841cdf2
4 changed files with 94 additions and 1 deletions

View file

@ -62,7 +62,8 @@ module Manager
email_services = [
Mailjet::API.new,
Sendinblue::API.new
Sendinblue::API.new,
Dolist::API.new
]
@sent_mails = email_services

90
app/lib/dolist/api.rb Normal file
View file

@ -0,0 +1,90 @@
class Dolist::API
CONTACT_URL = "https://apiv9.dolist.net/v1/contacts/read?AccountID=%{account_id}"
EMAIL_LOGS_URL = "https://apiv9.dolist.net/v1/statistics/email/sendings/transactional/search?AccountID=%{account_id}"
EMAIL_KEY = 7
DOLIST_WEB_DASHBOARD = "https://campaign.dolist.net/#/%{account_id}/contacts/%{contact_id}/sendings"
def properly_configured?
client_key.present?
end
def sent_mails(email_address)
contact_id = fetch_contact_id(email_address)
if contact_id.nil?
Rails.logger.info "Dolist::API: no contact found for email address '#{email_address}'"
return []
end
dolist_messages = fetch_dolist_messages(contact_id)
dolist_messages.map { |m| to_sent_mail(email_address, contact_id, m) }
rescue StandardError => e
Rails.logger.error e.message
[]
end
private
def headers
{
"Content-Type": 'application/json',
"Accept": 'application/json',
"X-API-Key": client_key
}
end
def client_key
Rails.application.secrets.dolist[:api_key]
end
def account_id
Rails.application.secrets.dolist[:account_id]
end
# https://api.dolist.com/documentation/index.html#/b3A6Mzg0MTQ0MDc-rechercher-un-contact
def fetch_contact_id(email_address)
url = format(CONTACT_URL, account_id: account_id)
body = {
Query: { FieldValueList: [{ ID: EMAIL_KEY, Value: email_address }] }
}.to_json
response = Typhoeus.post(url, body: body, headers: headers)
JSON.parse(response.response_body)["ID"]
end
# https://api.dolist.com/documentation/index.html#/b3A6Mzg0MTQ4MDk-recuperer-les-statistiques-des-envois-pour-un-contact
def fetch_dolist_messages(contact_id)
url = format(EMAIL_LOGS_URL, account_id: account_id)
body = { SearchQuery: { ContactID: contact_id } }.to_json
response = Typhoeus.post(url, body: body, headers: headers)
JSON.parse(response.response_body)['ItemList']
end
def to_sent_mail(email_address, contact_id, dolist_message)
SentMail.new(
from: ENV['DOLIST_NO_REPLY_EMAIL'],
to: email_address,
subject: dolist_message['SendingName'],
delivered_at: Time.zone.parse(dolist_message['SendDate']),
status: status(dolist_message),
service_name: 'Dolist',
external_url: format(DOLIST_WEB_DASHBOARD, account_id: account_id, contact_id: contact_id)
)
end
def status(dolist_message)
case dolist_message.fetch_values('Status', 'IsDelivered')
in ['Sent', true]
"delivered"
in ['Sent', false]
"sent (delivered ?)"
in [status, _]
status
end
end
end

View file

@ -118,3 +118,4 @@ MATOMO_IFRAME_URL="https://matomo.example.org/index.php?module=CoreAdminHome&act
# DOLIST_PASSWORD=""
# DOLIST_ACCOUNT_ID=""
# DOLIST_NO_REPLY_EMAIL=""
# DOLIST_API_KEY=""

View file

@ -39,6 +39,7 @@ defaults: &defaults
username: <%= ENV['DOLIST_USERNAME'] %>
password: <%= ENV['DOLIST_PASSWORD'] %>
account_id: <%= ENV['DOLIST_ACCOUNT_ID'] %>
api_key: <%= ENV['DOLIST_API_KEY'] %>
api_entreprise:
key: <%= ENV['API_ENTREPRISE_KEY'] %>
pipedrive: