1

I'm trying to create an account automatically when a user starts a live agent chat. This user is a community user, which means I should already know all of his information including contactId, account number, etc. I have read all of the live agent development guide, but it only shows examples of creating contacts and cases. When I tried to use a similar approach it did not work. This is what's shown in the development guide:

<form method="post" action="#">
<input type='hidden' name='liveagent.prechat:ContactFirstName' value='{!$User.firstname}'/>
<input type='hidden' name='liveagent.prechat:ContactLastName' value='{!$User.lastname}' />
<input type='text' name='liveagent.prechat:CaseSubject' placeholder='Subject'/>
<input type="hidden" name="liveagent.prechat.findorcreate.map:Contact" value="FirstName,ContactFirstName;LastName,ContactLastName" />
<input type="hidden" name="liveagent.prechat.findorcreate.map.doFind:Contact" value="FirstName,true;LastName,true" />
<input type="hidden" name="liveagent.prechat.findorcreate.map.isExactMatch:Contact" value="FirstName,true;LastName,true" />
<input type="hidden" name="liveagent.prechat.findorcreate.map.doCreate:Contact" value="FirstName,true;LastName,true" />
<input type="hidden" name="liveagent.prechat.findorcreate.saveToTranscript:Contact" value="ContactId" />
<input type="hidden" name="liveagent.prechat.findorcreate.showOnCreate:Contact" value="true" />
<input type="hidden" name="liveagent.prechat.findorcreate.linkToEntity:Contact" value="Case,ContactId" />
<input type="hidden" name="liveagent.prechat.findorcreate.map:Case" value="Subject,CaseSubject;Status,CaseStatus" />
<input type="hidden" name="liveagent.prechat.findorcreate.map.doCreate:Case" value="Subject,true;Status,true" />
<input type="submit" value="Submit" />

I have tried to use a similar format like this:

<input type='hidden' name='liveagent.prechat:AccountName' value='{!$Account.accountname}'/>
<input type="hidden" name="liveagent.prechat.findorcreate.map:Account" value="Account,AccountName" />
<input type="hidden" name="liveagent.prechat.findorcreate.map.doFind:Account" value="AccountName,true" />
<input type="hidden" name="liveagent.prechat.findorcreate.map.isExactMatch:Account" value="Account,true;" />
<input type="hidden" name="liveagent.prechat.findorcreate.map.doCreate:Account" value="AccountName,true" />
<input type="hidden" name="liveagent.prechat.findorcreate.saveToTranscript:Account" value="AccountId" />
<input type="hidden" name="liveagent.prechat.findorcreate.showOnCreate:Contact" value="true" />
<input type="hidden" name="liveagent.prechat.findorcreate.linkToEntity:Contact" value="Case,ContactId" />

I'll appreciate all the help! Thanks.

0

You can use Javascript Remoting, add a script to your VF page that passes the chat variables to an apex class that does the logic:

See the example below:

VF Page:

<input type='hidden' name='liveagent.prechat:AccountName' id="acc"/>


    <script>
    $(document).ready(function() { 
        console.log('Calling Your_Controller...');
        try {
            Visualforce.remoting.Manager.invokeAction(
                '{!$RemoteAction.Your_Controller.Your_Controller_Method}',
                function(result, event) {
                    if (event.status) {
                        console.log(result);
                        document.getElementById('acc').value = result.AccountName;
                        var formValid = document.forms["prechatForm"].checkValidity();
                        return formValid;
                    }
                }, {
                    escape: false
                }
                );
        } catch (ex) {
            alert(ex.message);
            console.log(ex);
            return false;
        }
    });
</script>

The controller:

    global without sharing class Your_Controller {

    @remoteAction
    global static boolean Your_Controller_Method() {
        User user = [select Id, ContactId from User where id =: UserInfo.getUserId()];
        // now you have the user so you can find the contact and then the account details
        Account acc = [SELECT id, Name FROM Account......];
        if (acc != null)
            return acc;

    }
}

See the documentation: JavaScript Remoting for Apex Controllers

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.