mirror of
https://github.com/lingble/chatwoot.git
synced 2025-11-01 19:48:08 +00:00
chore: Twilio to individual(SMS/Whatsapp) channels (#2566)
This commit is contained in:
BIN
app/javascript/dashboard/assets/images/channels/sms.png
Normal file
BIN
app/javascript/dashboard/assets/images/channels/sms.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 14 KiB |
@@ -37,8 +37,12 @@
|
|||||||
src="~dashboard/assets/images/channels/website.png"
|
src="~dashboard/assets/images/channels/website.png"
|
||||||
/>
|
/>
|
||||||
<img
|
<img
|
||||||
v-if="channel.key === 'twilio'"
|
v-if="channel.key === 'sms'"
|
||||||
src="~dashboard/assets/images/channels/twilio.png"
|
src="~dashboard/assets/images/channels/sms.png"
|
||||||
|
/>
|
||||||
|
<img
|
||||||
|
v-if="channel.key === 'whatsapp'"
|
||||||
|
src="~dashboard/assets/images/channels/whatsapp.png"
|
||||||
/>
|
/>
|
||||||
<h3 class="channel__title">
|
<h3 class="channel__title">
|
||||||
{{ channel.name }}
|
{{ channel.name }}
|
||||||
@@ -72,7 +76,7 @@ export default {
|
|||||||
if (key === 'email') {
|
if (key === 'email') {
|
||||||
return this.enabledFeatures.channel_email;
|
return this.enabledFeatures.channel_email;
|
||||||
}
|
}
|
||||||
return ['website', 'twilio', 'api'].includes(key);
|
return ['website', 'twilio', 'api', 'whatsapp', 'sms'].includes(key);
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
|||||||
@@ -126,6 +126,14 @@
|
|||||||
"API": {
|
"API": {
|
||||||
"ERROR_MESSAGE": "We were not able to authenticate Twilio credentials, please try again"
|
"ERROR_MESSAGE": "We were not able to authenticate Twilio credentials, please try again"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"SMS": {
|
||||||
|
"TITLE": "SMS Channel via Twilio",
|
||||||
|
"DESC": "Start supporting your customers via SMS with Twilio integration."
|
||||||
|
},
|
||||||
|
"WHATSAPP": {
|
||||||
|
"TITLE": "Whatsapp Channel via Twilio",
|
||||||
|
"DESC": "Start supporting your customers via Whatsapp with Twilio integration."
|
||||||
},
|
},
|
||||||
"API_CHANNEL": {
|
"API_CHANNEL": {
|
||||||
"TITLE": "API Channel",
|
"TITLE": "API Channel",
|
||||||
|
|||||||
@@ -42,7 +42,8 @@ export default {
|
|||||||
{ key: 'website', name: 'Website' },
|
{ key: 'website', name: 'Website' },
|
||||||
{ key: 'facebook', name: 'Facebook' },
|
{ key: 'facebook', name: 'Facebook' },
|
||||||
{ key: 'twitter', name: 'Twitter' },
|
{ key: 'twitter', name: 'Twitter' },
|
||||||
{ key: 'twilio', name: 'Twilio' },
|
{ key: 'whatsapp', name: 'WhatsApp via Twilio' },
|
||||||
|
{ key: 'sms', name: 'SMS via Twilio' },
|
||||||
{ key: 'email', name: 'Email' },
|
{ key: 'email', name: 'Email' },
|
||||||
{
|
{
|
||||||
key: 'api',
|
key: 'api',
|
||||||
|
|||||||
@@ -1,17 +1,19 @@
|
|||||||
import Facebook from './channels/Facebook';
|
import Facebook from './channels/Facebook';
|
||||||
import Website from './channels/Website';
|
import Website from './channels/Website';
|
||||||
import Twitter from './channels/Twitter';
|
import Twitter from './channels/Twitter';
|
||||||
import Twilio from './channels/Twilio';
|
|
||||||
import Api from './channels/Api';
|
import Api from './channels/Api';
|
||||||
import Email from './channels/Email';
|
import Email from './channels/Email';
|
||||||
|
import Sms from './channels/Sms';
|
||||||
|
import Whatsapp from './channels/Whatsapp';
|
||||||
|
|
||||||
const channelViewList = {
|
const channelViewList = {
|
||||||
facebook: Facebook,
|
facebook: Facebook,
|
||||||
website: Website,
|
website: Website,
|
||||||
twitter: Twitter,
|
twitter: Twitter,
|
||||||
twilio: Twilio,
|
|
||||||
api: Api,
|
api: Api,
|
||||||
email: Email,
|
email: Email,
|
||||||
|
sms: Sms,
|
||||||
|
whatsapp: Whatsapp,
|
||||||
};
|
};
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
|
|||||||
@@ -0,0 +1,21 @@
|
|||||||
|
<template>
|
||||||
|
<div class="wizard-body small-9 columns">
|
||||||
|
<page-header
|
||||||
|
:header-title="$t('INBOX_MGMT.ADD.SMS.TITLE')"
|
||||||
|
:header-content="$t('INBOX_MGMT.ADD.SMS.DESC')"
|
||||||
|
/>
|
||||||
|
<twilio type="sms"></twilio>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import PageHeader from '../../SettingsSubPageHeader';
|
||||||
|
import Twilio from './Twilio';
|
||||||
|
|
||||||
|
export default {
|
||||||
|
components: {
|
||||||
|
PageHeader,
|
||||||
|
Twilio,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
</script>
|
||||||
@@ -1,90 +1,72 @@
|
|||||||
|
<!-- Deprecated in favour of separate files for SMS and Whatsapp and also to implement new providers for each platform in the future-->
|
||||||
<template>
|
<template>
|
||||||
<div class="wizard-body small-9 columns">
|
<form class="row" @submit.prevent="createChannel()">
|
||||||
<page-header
|
<div class="medium-8 columns">
|
||||||
:header-title="$t('INBOX_MGMT.ADD.TWILIO.TITLE')"
|
<label :class="{ error: $v.channelName.$error }">
|
||||||
:header-content="$t('INBOX_MGMT.ADD.TWILIO.DESC')"
|
{{ $t('INBOX_MGMT.ADD.TWILIO.CHANNEL_NAME.LABEL') }}
|
||||||
/>
|
<input
|
||||||
<form class="row" @submit.prevent="createChannel()">
|
v-model.trim="channelName"
|
||||||
<div class="medium-8 columns">
|
type="text"
|
||||||
<label :class="{ error: $v.channelName.$error }">
|
:placeholder="$t('INBOX_MGMT.ADD.TWILIO.CHANNEL_NAME.PLACEHOLDER')"
|
||||||
{{ $t('INBOX_MGMT.ADD.TWILIO.CHANNEL_NAME.LABEL') }}
|
@blur="$v.channelName.$touch"
|
||||||
<input
|
|
||||||
v-model.trim="channelName"
|
|
||||||
type="text"
|
|
||||||
:placeholder="$t('INBOX_MGMT.ADD.TWILIO.CHANNEL_NAME.PLACEHOLDER')"
|
|
||||||
@blur="$v.channelName.$touch"
|
|
||||||
/>
|
|
||||||
<span v-if="$v.channelName.$error" class="message">{{
|
|
||||||
$t('INBOX_MGMT.ADD.TWILIO.CHANNEL_NAME.ERROR')
|
|
||||||
}}</span>
|
|
||||||
</label>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="medium-8 columns">
|
|
||||||
<label :class="{ error: $v.medium.$error }">
|
|
||||||
{{ $t('INBOX_MGMT.ADD.TWILIO.CHANNEL_TYPE.LABEL') }}
|
|
||||||
<select v-model="medium">
|
|
||||||
<option value="sms">SMS</option>
|
|
||||||
<option value="whatsapp">Whatsapp</option>
|
|
||||||
</select>
|
|
||||||
<span v-if="$v.medium.$error" class="message">{{
|
|
||||||
$t('INBOX_MGMT.ADD.TWILIO.CHANNEL_TYPE.ERROR')
|
|
||||||
}}</span>
|
|
||||||
</label>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="medium-8 columns">
|
|
||||||
<label :class="{ error: $v.phoneNumber.$error }">
|
|
||||||
{{ $t('INBOX_MGMT.ADD.TWILIO.PHONE_NUMBER.LABEL') }}
|
|
||||||
<input
|
|
||||||
v-model.trim="phoneNumber"
|
|
||||||
type="text"
|
|
||||||
:placeholder="$t('INBOX_MGMT.ADD.TWILIO.PHONE_NUMBER.PLACEHOLDER')"
|
|
||||||
@blur="$v.phoneNumber.$touch"
|
|
||||||
/>
|
|
||||||
<span v-if="$v.phoneNumber.$error" class="message">{{
|
|
||||||
$t('INBOX_MGMT.ADD.TWILIO.PHONE_NUMBER.ERROR')
|
|
||||||
}}</span>
|
|
||||||
</label>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="medium-8 columns">
|
|
||||||
<label :class="{ error: $v.accountSID.$error }">
|
|
||||||
{{ $t('INBOX_MGMT.ADD.TWILIO.ACCOUNT_SID.LABEL') }}
|
|
||||||
<input
|
|
||||||
v-model.trim="accountSID"
|
|
||||||
type="text"
|
|
||||||
:placeholder="$t('INBOX_MGMT.ADD.TWILIO.ACCOUNT_SID.PLACEHOLDER')"
|
|
||||||
@blur="$v.accountSID.$touch"
|
|
||||||
/>
|
|
||||||
<span v-if="$v.accountSID.$error" class="message">{{
|
|
||||||
$t('INBOX_MGMT.ADD.TWILIO.ACCOUNT_SID.ERROR')
|
|
||||||
}}</span>
|
|
||||||
</label>
|
|
||||||
</div>
|
|
||||||
<div class="medium-8 columns">
|
|
||||||
<label :class="{ error: $v.authToken.$error }">
|
|
||||||
{{ $t('INBOX_MGMT.ADD.TWILIO.AUTH_TOKEN.LABEL') }}
|
|
||||||
<input
|
|
||||||
v-model.trim="authToken"
|
|
||||||
type="text"
|
|
||||||
:placeholder="$t('INBOX_MGMT.ADD.TWILIO.AUTH_TOKEN.PLACEHOLDER')"
|
|
||||||
@blur="$v.authToken.$touch"
|
|
||||||
/>
|
|
||||||
<span v-if="$v.authToken.$error" class="message">{{
|
|
||||||
$t('INBOX_MGMT.ADD.TWILIO.AUTH_TOKEN.ERROR')
|
|
||||||
}}</span>
|
|
||||||
</label>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="medium-12 columns">
|
|
||||||
<woot-submit-button
|
|
||||||
:loading="uiFlags.isCreating"
|
|
||||||
:button-text="$t('INBOX_MGMT.ADD.TWILIO.SUBMIT_BUTTON')"
|
|
||||||
/>
|
/>
|
||||||
</div>
|
<span v-if="$v.channelName.$error" class="message">{{
|
||||||
</form>
|
$t('INBOX_MGMT.ADD.TWILIO.CHANNEL_NAME.ERROR')
|
||||||
</div>
|
}}</span>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="medium-8 columns">
|
||||||
|
<label :class="{ error: $v.phoneNumber.$error }">
|
||||||
|
{{ $t('INBOX_MGMT.ADD.TWILIO.PHONE_NUMBER.LABEL') }}
|
||||||
|
<input
|
||||||
|
v-model.trim="phoneNumber"
|
||||||
|
type="text"
|
||||||
|
:placeholder="$t('INBOX_MGMT.ADD.TWILIO.PHONE_NUMBER.PLACEHOLDER')"
|
||||||
|
@blur="$v.phoneNumber.$touch"
|
||||||
|
/>
|
||||||
|
<span v-if="$v.phoneNumber.$error" class="message">{{
|
||||||
|
$t('INBOX_MGMT.ADD.TWILIO.PHONE_NUMBER.ERROR')
|
||||||
|
}}</span>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="medium-8 columns">
|
||||||
|
<label :class="{ error: $v.accountSID.$error }">
|
||||||
|
{{ $t('INBOX_MGMT.ADD.TWILIO.ACCOUNT_SID.LABEL') }}
|
||||||
|
<input
|
||||||
|
v-model.trim="accountSID"
|
||||||
|
type="text"
|
||||||
|
:placeholder="$t('INBOX_MGMT.ADD.TWILIO.ACCOUNT_SID.PLACEHOLDER')"
|
||||||
|
@blur="$v.accountSID.$touch"
|
||||||
|
/>
|
||||||
|
<span v-if="$v.accountSID.$error" class="message">{{
|
||||||
|
$t('INBOX_MGMT.ADD.TWILIO.ACCOUNT_SID.ERROR')
|
||||||
|
}}</span>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<div class="medium-8 columns">
|
||||||
|
<label :class="{ error: $v.authToken.$error }">
|
||||||
|
{{ $t('INBOX_MGMT.ADD.TWILIO.AUTH_TOKEN.LABEL') }}
|
||||||
|
<input
|
||||||
|
v-model.trim="authToken"
|
||||||
|
type="text"
|
||||||
|
:placeholder="$t('INBOX_MGMT.ADD.TWILIO.AUTH_TOKEN.PLACEHOLDER')"
|
||||||
|
@blur="$v.authToken.$touch"
|
||||||
|
/>
|
||||||
|
<span v-if="$v.authToken.$error" class="message">{{
|
||||||
|
$t('INBOX_MGMT.ADD.TWILIO.AUTH_TOKEN.ERROR')
|
||||||
|
}}</span>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="medium-12 columns">
|
||||||
|
<woot-submit-button
|
||||||
|
:loading="uiFlags.isCreating"
|
||||||
|
:button-text="$t('INBOX_MGMT.ADD.TWILIO.SUBMIT_BUTTON')"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
@@ -92,20 +74,22 @@ import { mapGetters } from 'vuex';
|
|||||||
import alertMixin from 'shared/mixins/alertMixin';
|
import alertMixin from 'shared/mixins/alertMixin';
|
||||||
import { required } from 'vuelidate/lib/validators';
|
import { required } from 'vuelidate/lib/validators';
|
||||||
import router from '../../../../index';
|
import router from '../../../../index';
|
||||||
import PageHeader from '../../SettingsSubPageHeader';
|
|
||||||
|
|
||||||
const shouldStartWithPlusSign = (value = '') => value.startsWith('+');
|
const shouldStartWithPlusSign = (value = '') => value.startsWith('+');
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
components: {
|
|
||||||
PageHeader,
|
|
||||||
},
|
|
||||||
mixins: [alertMixin],
|
mixins: [alertMixin],
|
||||||
|
props: {
|
||||||
|
type: {
|
||||||
|
type: String,
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
accountSID: '',
|
accountSID: '',
|
||||||
authToken: '',
|
authToken: '',
|
||||||
medium: '',
|
medium: this.type,
|
||||||
channelName: '',
|
channelName: '',
|
||||||
phoneNumber: '',
|
phoneNumber: '',
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -0,0 +1,22 @@
|
|||||||
|
<template>
|
||||||
|
<div class="wizard-body small-9 columns">
|
||||||
|
<page-header
|
||||||
|
:header-title="$t('INBOX_MGMT.ADD.WHATSAPP.TITLE')"
|
||||||
|
:header-content="$t('INBOX_MGMT.ADD.WHATSAPP.DESC')"
|
||||||
|
/>
|
||||||
|
<twilio type="whatsapp"></twilio>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
|
||||||
|
import PageHeader from '../../SettingsSubPageHeader';
|
||||||
|
import Twilio from './Twilio';
|
||||||
|
|
||||||
|
export default {
|
||||||
|
components: {
|
||||||
|
PageHeader,
|
||||||
|
Twilio,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
</script>
|
||||||
Reference in New Issue
Block a user