1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
|
from odoo import fields, models, api
from datetime import datetime, timedelta
import logging
import json
_logger = logging.getLogger(__name__)
class WatiNotification(models.Model):
_name = 'wati.notification'
lead_id = fields.Many2one('crm.lead', string='Lead Id')
ticket_id = fields.Char(string='Ticked Id')
mobile = fields.Char(string='Mobile')
sender_name = fields.Char(string='Sender Name')
text = fields.Char(string='Text Message')
text_time = fields.Datetime(string='Text Time')
text_type = fields.Char(string='Text Type')
json_raw = fields.Char(string='JSON Raw Text')
is_parsed = fields.Boolean(string='Is Parsed')
is_lead = fields.Boolean(string='To Leads', help='apakah sudah ter-convert jadi leads')
def _cleanup(self):
current_time = datetime.now()
delta_time = current_time - timedelta(days=15)
delta_time = delta_time.strftime('%Y-%m-%d %H:%M:%S')
self.env['wati.notification'].search([
('create_date', '<', delta_time),
('is_lead', '=', True),
]).unlink()
_logger.info('Success Cleanup WATI Notification')
def _parse_notification(self, limit = 0):
domain = [('is_parsed', '=', False)]
notifications = self.search(domain, order='id desc', limit=limit)
notification_not_parsed_count = self.search_count(domain)
i = 0
for notification in notifications:
i += 1
_logger.info('[Parse Notification][%s] Process: %s/%s | Not Parsed: %s' % (notification.id, i, str(limit), str(notification_not_parsed_count)))
notification_json = json.loads(notification.json_raw)
sender_name = 'Indoteknik'
if 'senderName' in notification_json:
sender_name = notification_json['senderName']
notification.ticket_id = notification_json['ticketId']
notification.mobile = notification_json['waId']
notification.sender_name = sender_name
notification.text = notification_json['text']
notification.text_time = datetime.fromtimestamp(float(notification_json['timestamp']))
notification.text_type = notification_json['type']
notification.is_parsed = True
return
def _convert_to_leads(self):
query = [
('is_lead', '=', False)
]
watis = self.env['wati.notification'].search(query, order='id')
for wati in watis:
_logger.info('Convert to Lead WATI Notification ID %s' % wati.id)
ticket_id = json.loads(wati.json_raw)['ticketId']
text = json.loads(wati.json_raw)['text']
current_lead = self.env['crm.lead'].search([('ticket_id', '=', ticket_id)], limit=1)
operator_email = json.loads(wati.json_raw)['operatorEmail']
operator_name = json.loads(wati.json_raw)['operatorName']
event_type = json.loads(wati.json_raw)['eventType']
if event_type == 'sessionMessageSent':
if 'Saya *Eko*' in str(text):
sales = 11
elif 'Saya *Nabila*' in str(text):
sales = 20
elif 'Saya *Novita*' in str(text):
sales = 377
elif 'Saya *Putri*' in str(text):
sales = 10
elif 'Saya *Heriyanto*' in str(text):
sales = 375
elif 'Saya *Ade*' in str(text):
sales = 9
elif 'Saya *Adela*' in str(text):
sales = 8
elif 'Saya *Jananto*' in str(text):
sales = 376
elif 'Saya *Dwi*' in str(text):
sales = 24
else:
sales = 25 #System
current_lead.description = str(current_lead.description)+ "| i:" + str(text)
current_lead.operator_email = operator_email
current_lead.operator_name = operator_name
current_lead.user_id = sales
elif current_lead:
# must append internal notes as a reply here
current_lead.description = str(current_lead.description) + " | c:" +str(text)
current_lead.operator_email = operator_email
current_lead.operator_name = operator_name
else:
# create new leads
contact_name = json.loads(wati.json_raw)['senderName']
phone = json.loads(wati.json_raw)['waId']
name = 'Ada pesan dari WATI '+str(phone)+' '+str(contact_name)
current_lead = self.env['crm.lead'].create([{
'name': name,
'ticket_id': ticket_id,
'operator_email': operator_email,
'operator_name': operator_name,
'contact_name': contact_name,
'phone': phone,
'description': "c:" +str(text)
}])
wati.is_lead = True
wati.lead_id = current_lead.id
|