Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
The diff you're trying to view is too large. We only load the first 3000 changed files.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
/.buildpath
/.project
/.settings/
key.json
5 changes: 5 additions & 0 deletions .htaccess
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
Allow From All
<FilesMatch "key.json">
Deny From All
Allow From localhost
</FilesMatch>
78 changes: 33 additions & 45 deletions assets/js/frontend.js
Original file line number Diff line number Diff line change
Expand Up @@ -110,18 +110,19 @@ function welcomeIntent(sequence) {

jQuery.ajax({
type : "POST",
url : myc_script_vars.base_url + "query?v=" + myc_script_vars.version_date,
url : myc_script_vars.base_url + myc_script_vars.project_id + myc_script_vars.mid_url + myc_script_vars.session_id + myc_script_vars.end_url,
contentType : "application/json; charset=utf-8",
dataType : "json",
headers : {
"Authorization" : "Bearer " + myc_script_vars.access_token
"Authorization" : "Bearer " + myc_script_vars.access_token,
},
data : JSON.stringify( {
event : {
name : "WELCOME"
},
lang : myc_script_vars.language,
sessionId : myc_script_vars.session_id,
"queryInput": {
"event": {
"name": "WELCOME",
"languageCode": myc_script_vars.language
},
}
} ),
success : function(response) {
prepareResponse(response, sequence);
Expand All @@ -136,6 +137,9 @@ function welcomeIntent(sequence) {

}

// query: text,
// lang : myc_script_vars.language,
// sessionId: myc_script_vars.session_id
/**
* Send Dialogflow query
*
Expand All @@ -144,19 +148,21 @@ function welcomeIntent(sequence) {
* @returns
*/
function textQuery(text, sequence) {

jQuery.ajax({
type : "POST",
url : myc_script_vars.base_url + "query?v=" + myc_script_vars.version_date,
url : myc_script_vars.base_url + myc_script_vars.project_id + myc_script_vars.mid_url + myc_script_vars.session_id + myc_script_vars.end_url,
contentType : "application/json; charset=utf-8",
dataType : "json",
headers : {
"Authorization" : "Bearer " + myc_script_vars.access_token
"Authorization" : "Bearer " + myc_script_vars.access_token,
},
data: JSON.stringify( {
query: text,
lang : myc_script_vars.language,
sessionId: myc_script_vars.session_id
"queryInput": {
"text": {
"text": text,
"languageCode": myc_script_vars.language
}
}
} ),
success : function(response) {
setTimeout(function(){
Expand All @@ -165,7 +171,6 @@ function textQuery(text, sequence) {
}
prepareResponse(response,sequence);
}, myc_script_vars.response_delay);

},
error : function(response) {
if (myc_script_vars.show_loading) {
Expand All @@ -186,43 +191,26 @@ function textQuery(text, sequence) {
* @param response
*/
function prepareResponse(response, sequence) {

if (response.status.code == "200" ) {
if (response.hasOwnProperty('responseId')) {

jQuery(window).trigger("myc_response_success", response);

jQuery("#myc-container-" + sequence + " .myc-conversation-area .myc-conversation-response").removeClass("myc-is-active");

var messages = response.result.fulfillment.messages;
var numMessages = messages.length;
var index = 0;
for (index; index<numMessages; index++) {
var message = messages[index];

if (myc_script_vars.messaging_platform == message.platform
|| myc_script_vars.messaging_platform == "default" && message.platform === undefined
|| message.platform === undefined && ! hasPlatform(messages, myc_script_vars.messaging_platform) ) {

switch (message.type) {
case 0: // text response
textResponse(message.speech, sequence);
break;
case 1: // TODO card response
cardResponse(message.title, message.subtitle, message.buttons, message.text, message.postback, sequence);
break;
case 2: // quick replies
quickRepliesResponse(message.title, message.replies, sequence);
break;
case 3: // image response
imageResponse(message.imageUrl, sequence);
break;
case 3: // custom payload

break;
default:
}
var messages = response.queryResult.fulfillmentMessages

if (messages[0].hasOwnProperty('text')) {
textResponse(messages[0].text.text[0], sequence);
} else if (messages[0].hasOwnProperty('card')) {
//TODO cardResponse(messages[0].title, messages[0].subtitle, messages[0].buttons, messages[0].text, messages[0].postback, sequence);
} else if (messages[0].hasOwnProperty('replies')) {
//TODO quickRepliesResponse(messages[0].title, messages[0].replies, sequence);
} else if (messages[0].hasOwnProperty('image')) {
imageResponse(messages[0].image.imageUri, sequence);
} else {
console.log('not found');
textResponse(myc_script_vars.messages.internal_error, sequence);
}
}

} else {
textResponse(myc_script_vars.messages.internal_error, sequence);
Expand Down
24 changes: 24 additions & 0 deletions includes/admin/settings/display-settings.php
Original file line number Diff line number Diff line change
Expand Up @@ -169,3 +169,27 @@ function myc_field_radio_buttons( $args ) {
<label><?php echo $args['label']; ?></label>
<?php
}

function myc_field_json( $args ) {
$keyfile = MYC_PLUGIN_DIR . 'key.json';
?>
<div
<?php
if (!file_exists($keyfile)) {
echo 'style="border: solid 2px red;"';
}
?>
>
<label>Please Save the JSON key FIle at this location: <?= MYC_PLUGIN_DIR ?> <br> and with this name: key.json <br> The file can be obtained from <a target="_blank" href="https://console.cloud.google.com/iam-admin/iam">Google Console IAM</a><br>
<?php
if (file_exists($keyfile)) {
echo '<b style="color: #5ed836;">Found</b>';
} else {
echo '<b style="color: red;">Not Found</b>';
}
?>
</label>
</div>
<?php

}
73 changes: 20 additions & 53 deletions includes/admin/settings/register-settings.php
Original file line number Diff line number Diff line change
Expand Up @@ -51,16 +51,29 @@ function myc_register_settings() {
add_settings_section( 'myc_section_overlay', null, 'myc_section_overlay_desc', 'my-chatbot&tab=myc_overlay_settings' );

$setting_fields = array(
'myc_access_token' => array(
'title' => __( 'Access Token', 'my-chatbot' ),
'myc_key_file' => array(
'title' => __( 'JSON Keyfile', 'my-chatbot' ),
'callback' => 'myc_field_json',
'page' => 'my-chatbot&tab=myc_general_settings',
'section' => 'myc_section_general',
'args' => array(
'option_name' => 'myc_general_settings',
'setting_id' => 'myc_key_file',
'label' => __( 'The file can be obtained from <a target="_blank" href="https://console.cloud.google.com/iam-admin/iam">Google Console IAM</a>', 'my-chatbot' ),
'placeholder' => __( 'JSON File', 'my-chatbot' ),
'required' => true
)
),
'myc_project_id' => array(
'title' => __( 'Project ID', 'my-chatbot' ),
'callback' => 'myc_field_input',
'page' => 'my-chatbot&tab=myc_general_settings',
'section' => 'myc_section_general',
'args' => array(
'option_name' => 'myc_general_settings',
'setting_id' => 'myc_access_token',
'label' => __( 'Enter Dialogflow agent client access token.', 'my-chatbot' ),
'placeholder' => __( 'Enter access token...', 'my-chatbot' ),
'setting_id' => 'myc_project_id',
'label' => __( 'Enter Google Project ID. Can be found in Genaral Settins of Dialogflow Agent.', 'my-chatbot' ),
'placeholder' => __( 'Enter Project ID...', 'my-chatbot' ),
'required' => true
)
),
Expand Down Expand Up @@ -125,52 +138,6 @@ function myc_register_settings() {
)
)
),
'messaging_platform' => array(
'title' => __( 'Messaging Platform', 'my-chatbot' ),
'callback' => 'myc_field_radio_buttons',
'page' => 'my-chatbot&tab=myc_general_settings',
'section' => 'myc_section_general',
'args' => array(
'option_name' => 'myc_general_settings',
'setting_id' => 'messaging_platform',
'radio_buttons' => array(
array(
'value' => 'default',
'label' => __( 'Default', 'my-chatbot' ),
),
array(
'value' => 'google',
'label' => __( 'Actions on Google', 'my-chatbot' ),
),
array(
'value' => 'facebook',
'label' => __( 'Facebook Messenger', 'my-chatbot' ),
),
array(
'value' => 'slack',
'label' => __( 'Slack', 'my-chatbot' ),
),
array(
'value' => 'telegram',
'label' => __( 'Telegram', 'my-chatbot' ),
),
array(
'value' => 'kik',
'label' => __( 'Kik', 'my-chatbot' ),
),
array(
'value' => 'viber',
'label' => __( 'Viber', 'my-chatbot' ),
),
array(
'value' => 'skype',
'label' => __( 'Skype', 'my-chatbot' ),
)

),
'label' => __( 'Assume appearance of a Dialogflow supported messaging platform. Note default responses do not support rich message content.', 'my-chatbot' )
)
),
'show_time' => array(
'title' => __( 'Show Time', 'my-chatbot' ),
'callback' => 'myc_field_checkbox',
Expand Down Expand Up @@ -376,11 +343,11 @@ function myc_default_settings() {
$general_settings = (array) get_option( 'myc_general_settings' );

$general_settings = array_merge( array(
'myc_access_token' => '',
'myc_key_file' => '',
'myc_project_id' => '',
'input_text' => __( 'Ask something...', 'my-chatbot' ),
'enable_welcome_event' => false,
'language' => 'en',
'messaging_platform' => 'default',
'show_time' => true,
'show_loading' => true,
'loading_dots_color' => '#1f4c73',
Expand Down
27 changes: 24 additions & 3 deletions includes/install.php
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,30 @@
* Install
*/
function myc_install() {

// Add the transient to redirect
set_transient( '_myc_activation_redirect', true, 30 );


// Create Databse to Store current Google O-Auth Tokens
global $wpdb;
$myc_db_version = '1.0';

$table_name = $wpdb->prefix . 'myc_token';

$charset_collate = $wpdb->get_charset_collate();

$sql = "CREATE TABLE $table_name (
id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
token VARCHAR(255) NOT NULL,
timecreated VARCHAR(255) NOT NULL,
validuntil VARCHAR(255) NOT NULL,
PRIMARY KEY (id)
) $charset_collate;";

require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
dbDelta( $sql );

add_option( 'myc_db_version', $myc_db_version );

}
register_activation_hook( MYC_PLUGIN_FILE, 'myc_install' );
register_activation_hook( MYC_PLUGIN_FILE, 'myc_install' );
21 changes: 17 additions & 4 deletions includes/scripts.php
Original file line number Diff line number Diff line change
Expand Up @@ -40,12 +40,25 @@ function myc_load_scripts() {
$session_id = md5( uniqid( 'myc-' ) ); // do not set cookie here as headers have already been set
}

global $wpdb;
$table_name = $wpdb->prefix . 'myc_token';

$oauth_token = '';

$sql = "SELECT * FROM {$table_name}";
$result = $wpdb->get_results( $sql );

if (!empty($result)) {
$oauth_token = $result[0]->token;
}

wp_localize_script( 'myc-script', 'myc_script_vars', apply_filters( 'myc_script_vars', array(
'access_token' => apply_filters( 'myc_script_access_token', $general_settings['myc_access_token'] ),
'access_token' => apply_filters( 'myc_script_access_token', $oauth_token ),
'enable_welcome_event' => apply_filters( 'myc_script_enable_welcome_event', $general_settings['enable_welcome_event'] ),
'messaging_platform' => apply_filters( 'myc_script_messaging_platform', $general_settings['messaging_platform'] ),
'base_url' => 'https://api.dialogflow.com/v1/',
'version_date' => apply_filters( 'myc_protocol_version', '20170712' ),
'project_id' => apply_filters( 'myc_script_project_id', $general_settings['myc_project_id'] ),
'base_url' => 'https://dialogflow.googleapis.com/v2/projects/',
'mid_url' => '/agent/sessions/',
'end_url' => ':detectIntent',
'messages' => array(
'internal_error' => __( 'An internal error occured', 'my-chatbot' ),
'input_unknown' => __( 'I\'m sorry I do not understand.', 'my-chatbot' )
Expand Down
Loading