Deploy: 2026-05-21 23:50:01
This commit is contained in:
@@ -1159,6 +1159,37 @@
|
|||||||
pollingIntervalId: null,
|
pollingIntervalId: null,
|
||||||
actionLoading: false,
|
actionLoading: false,
|
||||||
|
|
||||||
|
// Modals
|
||||||
|
showAddContactModal: false,
|
||||||
|
showNewTemplateModal: false,
|
||||||
|
showLaunchCampaignModal: false,
|
||||||
|
|
||||||
|
// Forms
|
||||||
|
contactName: '',
|
||||||
|
contactPhone: '',
|
||||||
|
contactEmail: '',
|
||||||
|
contactNotes: '',
|
||||||
|
|
||||||
|
templateName: '',
|
||||||
|
templateBody: '',
|
||||||
|
templateType: 'text',
|
||||||
|
templateMediaUrl: '',
|
||||||
|
|
||||||
|
campaignName: '',
|
||||||
|
campaignGroupId: '',
|
||||||
|
campaignSessionId: '',
|
||||||
|
campaignTemplateId: '',
|
||||||
|
|
||||||
|
groups: [],
|
||||||
|
|
||||||
|
chatbotSettings: {
|
||||||
|
is_active: '0',
|
||||||
|
trigger_type: 'keyword',
|
||||||
|
keyword: '',
|
||||||
|
ai_prompt: '',
|
||||||
|
gemini_api_key: ''
|
||||||
|
},
|
||||||
|
|
||||||
// Methods
|
// Methods
|
||||||
checkAuth() {
|
checkAuth() {
|
||||||
this.token = localStorage.getItem('nabeh_token');
|
this.token = localStorage.getItem('nabeh_token');
|
||||||
@@ -1405,6 +1436,196 @@
|
|||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error('Error fetching campaigns:', err);
|
console.error('Error fetching campaigns:', err);
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
async fetchGroups() {
|
||||||
|
try {
|
||||||
|
const response = await fetch('/api/groups', {
|
||||||
|
headers: { 'Authorization': `Bearer ${this.token}` }
|
||||||
|
});
|
||||||
|
const data = await response.json();
|
||||||
|
if (response.ok) {
|
||||||
|
this.groups = data.groups || data.data || [];
|
||||||
|
}
|
||||||
|
} catch (err) {
|
||||||
|
console.error('Error fetching groups:', err);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
async fetchChatbotSettings() {
|
||||||
|
try {
|
||||||
|
const response = await fetch('/api/chatbot/rules', {
|
||||||
|
headers: { 'Authorization': `Bearer ${this.token}` }
|
||||||
|
});
|
||||||
|
const data = await response.json();
|
||||||
|
if (response.ok && data.data && data.data.length > 0) {
|
||||||
|
const rule = data.data[0];
|
||||||
|
this.chatbotSettings.is_active = rule.is_active.toString();
|
||||||
|
this.chatbotSettings.trigger_type = rule.trigger_type;
|
||||||
|
this.chatbotSettings.keyword = rule.keyword || '';
|
||||||
|
this.chatbotSettings.ai_prompt = rule.ai_prompt || '';
|
||||||
|
this.chatbotSettings.gemini_api_key = rule.gemini_api_key ? '••••••••' : '';
|
||||||
|
} else {
|
||||||
|
this.chatbotSettings = {
|
||||||
|
is_active: '0',
|
||||||
|
trigger_type: 'keyword',
|
||||||
|
keyword: '',
|
||||||
|
ai_prompt: '',
|
||||||
|
gemini_api_key: ''
|
||||||
|
};
|
||||||
|
}
|
||||||
|
} catch (err) {
|
||||||
|
console.error('Error fetching chatbot settings:', err);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
async saveChatbotSettings() {
|
||||||
|
this.actionLoading = true;
|
||||||
|
try {
|
||||||
|
const payload = {
|
||||||
|
is_active: this.chatbotSettings.is_active === '1',
|
||||||
|
trigger_type: this.chatbotSettings.trigger_type,
|
||||||
|
keyword: this.chatbotSettings.keyword,
|
||||||
|
ai_prompt: this.chatbotSettings.ai_prompt,
|
||||||
|
gemini_api_key: this.chatbotSettings.gemini_api_key,
|
||||||
|
session_id: this.whatsappSession ? this.whatsappSession.id : null
|
||||||
|
};
|
||||||
|
const response = await fetch('/api/chatbot/rules', {
|
||||||
|
method: 'POST',
|
||||||
|
headers: {
|
||||||
|
'Authorization': `Bearer ${this.token}`,
|
||||||
|
'Content-Type': 'application/json'
|
||||||
|
},
|
||||||
|
body: JSON.stringify(payload)
|
||||||
|
});
|
||||||
|
const data = await response.json();
|
||||||
|
if (response.ok) {
|
||||||
|
alert('Chatbot settings saved successfully.');
|
||||||
|
await this.fetchChatbotSettings();
|
||||||
|
} else {
|
||||||
|
alert(data.message || 'Failed to save chatbot settings.');
|
||||||
|
}
|
||||||
|
} catch (err) {
|
||||||
|
alert('Error communicating with backend API.');
|
||||||
|
} finally {
|
||||||
|
this.actionLoading = false;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
openAddContactModal() {
|
||||||
|
this.contactName = '';
|
||||||
|
this.contactPhone = '';
|
||||||
|
this.contactEmail = '';
|
||||||
|
this.contactNotes = '';
|
||||||
|
this.showAddContactModal = true;
|
||||||
|
},
|
||||||
|
|
||||||
|
async submitAddContact() {
|
||||||
|
this.actionLoading = true;
|
||||||
|
try {
|
||||||
|
const response = await fetch('/api/contacts', {
|
||||||
|
method: 'POST',
|
||||||
|
headers: {
|
||||||
|
'Authorization': `Bearer ${this.token}`,
|
||||||
|
'Content-Type': 'application/json'
|
||||||
|
},
|
||||||
|
body: JSON.stringify({
|
||||||
|
name: this.contactName,
|
||||||
|
phone: this.contactPhone,
|
||||||
|
email: this.contactEmail,
|
||||||
|
notes: this.contactNotes
|
||||||
|
})
|
||||||
|
});
|
||||||
|
const data = await response.json();
|
||||||
|
if (response.ok) {
|
||||||
|
this.showAddContactModal = false;
|
||||||
|
await this.fetchContacts();
|
||||||
|
} else {
|
||||||
|
alert(data.error || 'Failed to create contact.');
|
||||||
|
}
|
||||||
|
} catch (err) {
|
||||||
|
alert('Connection error.');
|
||||||
|
} finally {
|
||||||
|
this.actionLoading = false;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
openNewTemplateModal() {
|
||||||
|
this.templateName = '';
|
||||||
|
this.templateBody = '';
|
||||||
|
this.templateType = 'text';
|
||||||
|
this.templateMediaUrl = '';
|
||||||
|
this.showNewTemplateModal = true;
|
||||||
|
},
|
||||||
|
|
||||||
|
async submitNewTemplate() {
|
||||||
|
this.actionLoading = true;
|
||||||
|
try {
|
||||||
|
const response = await fetch('/api/templates', {
|
||||||
|
method: 'POST',
|
||||||
|
headers: {
|
||||||
|
'Authorization': `Bearer ${this.token}`,
|
||||||
|
'Content-Type': 'application/json'
|
||||||
|
},
|
||||||
|
body: JSON.stringify({
|
||||||
|
name: this.templateName,
|
||||||
|
body: this.templateBody,
|
||||||
|
type: this.templateType,
|
||||||
|
media_url: this.templateMediaUrl
|
||||||
|
})
|
||||||
|
});
|
||||||
|
const data = await response.json();
|
||||||
|
if (response.ok) {
|
||||||
|
this.showNewTemplateModal = false;
|
||||||
|
await this.fetchTemplates();
|
||||||
|
} else {
|
||||||
|
alert(data.error || 'Failed to create template.');
|
||||||
|
}
|
||||||
|
} catch (err) {
|
||||||
|
alert('Connection error.');
|
||||||
|
} finally {
|
||||||
|
this.actionLoading = false;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
async openLaunchCampaignModal() {
|
||||||
|
this.campaignName = '';
|
||||||
|
this.campaignGroupId = '';
|
||||||
|
this.campaignSessionId = this.whatsappSession ? this.whatsappSession.id : '';
|
||||||
|
this.campaignTemplateId = '';
|
||||||
|
await this.fetchGroups();
|
||||||
|
await this.fetchTemplates();
|
||||||
|
this.showLaunchCampaignModal = true;
|
||||||
|
},
|
||||||
|
|
||||||
|
async submitLaunchCampaign() {
|
||||||
|
this.actionLoading = true;
|
||||||
|
try {
|
||||||
|
const response = await fetch('/api/campaigns', {
|
||||||
|
method: 'POST',
|
||||||
|
headers: {
|
||||||
|
'Authorization': `Bearer ${this.token}`,
|
||||||
|
'Content-Type': 'application/json'
|
||||||
|
},
|
||||||
|
body: JSON.stringify({
|
||||||
|
name: this.campaignName,
|
||||||
|
group_id: this.campaignGroupId,
|
||||||
|
session_id: this.campaignSessionId,
|
||||||
|
template_id: this.campaignTemplateId
|
||||||
|
})
|
||||||
|
});
|
||||||
|
const data = await response.json();
|
||||||
|
if (response.ok) {
|
||||||
|
this.showLaunchCampaignModal = false;
|
||||||
|
await this.fetchCampaigns();
|
||||||
|
} else {
|
||||||
|
alert(data.error || 'Failed to launch campaign.');
|
||||||
|
}
|
||||||
|
} catch (err) {
|
||||||
|
alert('Connection error.');
|
||||||
|
} finally {
|
||||||
|
this.actionLoading = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user