Article

Bpmonline plugin for wordpress (gravity forms, contact form 7)

This is the version of the popular plugin "Forms: 3rd-Party Integration" adopted for sending data to bpm'online. 

Important. Please note that the plugin works only with Leads. If you need to create an activity participant, a case or something else, please create a lead instead. Then create a business process that will create the needed case and everything else based on the newly created lead.

Important. Please note that the plugin is not a bpm'online product and it is not officially supported by bpm'online. Please install the plugin on copy of your website and test it before installing on a production environment.

Download

https://github.com/EugenePodkovka/Forms-3rd-Party-Integration-Bpmonline…

Source code

https://github.com/EugenePodkovka/Forms-3rd-Party-Integration-Bpmonline

Installation guide
1. Install and configure the contact form if you have not done it before. The plugin is compitable with "contact form 7" and "gravity forms". Check that the forms are working properly. 

Important. You need to use only one form plugin on an application. For example, you can't use contact form 7 and gravity forms on the same site at the same time.

2. Download, install and activate the plugin. The configuration button will appear in the contact form menu.

3. Open the plugin settings. Specify the submission url in the service (you need to create a separate service for every form)

Please copy the URL of the bpm'online application and replace the "YourApplication" part in the service URL below. Use the service URL as a Submission URL in the Service.

 

https://YourApplication.bpmonline.com/0/ServiceModel/GeneratedObjectWebFormService.svc/SaveWebFormObjectData

 

4. Fill in the field mapping. 

Take the bpm'online field names from the bpm'online landing page setup and take the contact form field names in the html code of the landing page or copy the field names from the form setup.

Please note that "gravity forms" checkboxes should be named with two underscores. For example input_6_1

5. Add the "formId" field into the field mapping. It should be default. Please take the value from the bpm'online landing page setup.

Important. For the first installation I recommend transferring the following 4+1 fields: Name, Email, MobilePhone, Company + formId

6. Save the setup, refresh the page, configure landing in bpm'online according to the manual on academy and feel free to use the functionality.

Important. The website domain in the landing page setup in bpm'online should contain the bpm'online URL and * char.

Troubleshooting

Important. If you setup a form and it doesn't work, please check the "Degug Mode" checkbox (look at the screenshot below) specify your email in the "Email" field of the plugin setup page and submit the form. You'll receive a report on the specified mailbox. Please check the report. This way you'll be able to find out what you missed.

Share

37 comments

Please use the following manual if you need to transfer the first and last name separately.

https://community.bpmonline.com/articles/transferring-first-and-last-na…

I installed the plugin and set it up but I am having trouble with connecting it to the bpm'online crm. 

in the CF7-3rdParty Integration Failure email I receive a source:

{"code":"rest_no_route","message":"No route was found matching the URL and request method","data":{"status":404}}

It appears to timeout after 10 seconds and then send me the failure email. 

Any ideas how to fix this? Its urgent and Im struggling to find the solution now for a couple days

 

 

Hi Eugene,

Taking a long shot... do you now if this could work with Caldera forms?

Thanks

Brendon Langford,

It doesn't work with Caldera forms. I've never received requests for "Caldera forms" integration from our customers before.

Joel Berg,

I haven't seen your post before. Are you sure that you downloaded the plugin from this article? Please save the failure email in a file and let me download it.

Hi,

Trying this out but doesn't seem to work.  Need a little assistance.

Ryan C Krause,

It works. Please compare your configuration with the screenshots and check the url that you specified in bpm’online. If it doesn’t help, please follow the “troubleshooting” point.  

Eugene Podkovka,

Hi,

So have this working with Contact Form 7 but can not get it to work with Gravity Forms. Keep getting a Postal/Zip code required error but that field is there and is filled out.  Any ideas?

 

We finally figured this out.  For anyone having trouble do not use the field ID with gravity forms (contact form 7 works with field id). You have to use the field name.  Once we did that everything worked properly.

Ryan.

Pedro Henrique Freitas de Paula,

There should be name of the fields instead of the captions.

http://prntscr.com/k0dway

You can find the field names in a section wizard. Click on edit a field and then take the value from the "name in DB" field.

Hi Eugene,

I have successfully installed the plugin, created the landing form on our website using Gravity Forms, created the service using the plugin, and have been receiving debug emails indicating the following:

{"SaveWebFormObjectDataResult":"{resultMessage:\"Unknown landing identifier.\",resultCode:-1}"}

I can't find any bpm'online documentation referring to error messages and how to go about resolving them.  Can you assist?

Thanks,

Steve

Steve Short,

Yeah. The exception message is related to the following record.

http://prntscr.com/k20ge9

Please make sure that the checkbox is checked and that there are no mistakes in the word "formId".

Eugene Podkovka,

Thanks, Eugene.  I thought the message might be referring to the formID record, so I had previously checked many times to be sure I am using the correct value provided in the bpm'online record for the form, as well as having the record configured exactly to the instructions on the screen shot you provided.

I am fairly certain that I have accurately configured the record in the plugin.  If so, what do you suggest I do next to determine why it isn't functioning as expected?

Steve Short,

Please send me a screenshot of the mapping

Eugene Podkovka,

Steve Short,

So it should be "formId" instead of "formID".

Thanks for catching that. Now I'm getting this message:

*** Response ***
WP_HTTP_Requests_Response Object
(
    [response:protected] => Requests_Response Object
        (
            [body] => {"SaveWebFormObjectDataResult":"{resultMessage:\"Not allowed request URL.\",resultCode:-1}"}

Suggestions?

Steve Short,

Wrong URL here

http://prntscr.com/k22fvi

Hmmm. I guess I'm not clear on which URL should be used. I assumed it should be the URL for the website form (pls see attachments).

Steve Short,

It should contain exactly the thing described in the manual above

http://prntscr.com/k22la1

Thanks, Eugene. Sorry for my lack of understanding...it seems strange that I am configuring the bpm'online online form record with the URL that bpm itself created for our instance of the app and obviously knows. But I made the change and was able to put through a successful post from our website form. Thanks for your help and quick responses!

Steve Short,

The URL field prevents sending client side requests from fake copies of landing pages. The plugin doesn't work on the client side. So it doesn't need such protection. Specifying the URL and the "*" char is a temporary solution for backwards compatibility. It will be changed in the future.

Hi Eugene,

Unfortunately, I'm back ;-(  I tried adding a new Gravity form for subscribing to our newsletter and I'm getting an error indicating the plug-in can't find the new bpm'online form I created:

*** Response ***
WP_HTTP_Requests_Response Object
(
    [response:protected] => Requests_Response Object
        (
            [body] => {"SaveWebFormObjectDataResult":"{resultMessage:\"Unknown landing identifier.\",resultCode:-1}"}

Any insights?

Thanks,

Steve

Steve Short,

I'm positive that I've already answered to the question. Please use the previous answer. 

http://prntscr.com/kbchg4

Thanks, Eugene...you are right. I'm sorry for the inconvenience.

Hi Eugene,

I have successfully created the landing form on our website using Contact Form 7, created the service using the plugin, and have been receiving debug emails indicating the following:

There was an error when trying to integrate with the 3rd party service {Service 1} (https://crmhub.bpmonline.com/0/ServiceModel/GeneratedObjectWebFormService.svc/SaveWebFormObjectData).

**FORM**
Title: Контактная форма 1
Intended Recipient: kalushka.d@crmhub.com.ua
Source: http://www.crmhub.com.ua/wp-json/contact-form-7/v1/contact-forms/29/feedback

**SUBMISSION**
Array
(
    [timeout] => 20
    [body] => Array
        (
            [formId] => 24958f36-cb13-4bb7-a6a5-8a72c341781c
            [Email] => d.kalushka@mail.ru
            [Company] => HUB
            [MobilePhone] => 8888888
            [Name] => Денис Калушка
        )

)

**RAW RESPONSE**
Array
(
    [headers] => Requests_Utility_CaseInsensitiveDictionary Object
        (
            [data:protected] => Array
                (
                    [cache-control] => private
                    [content-type] => text/html
                    [server] => Microsoft-IIS/10.0
                    [set-cookie] => BPMSESSIONID=ipgxgr1is54x0kyg4tbzxrye; path=/0; secure; HttpOnly
                    [x-aspnet-version] => 4.0.30319
                    [x-powered-by] => ASP.NET
                    [x-frame-options] => SAMEORIGIN
                    [x-content-type-options] => nosniff
                    [date] => Thu, 25 Oct 2018 00:54:45 GMT

                    [content-length] => 2738
                )

        )

    [body] => <?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <title>Request Error</title>
    <style>BODY { color: #000000; background-color: white; font-family: Verdana; margin-left: 0px; margin-top: 0px; } #content { margin-left: 30px; font-size: .70em; padding-bottom: 2em; } A:link { color: #336699; font-weight: bold; text-decoration: underline; } A:visited { color: #6699cc; font-weight: bold; text-decoration: underline; } A:active { color: #336699; font-weight: bold; text-decoration: underline; } .heading1 { background-color: #003366; border-bottom: #336699 6px solid; color: #ffffff; font-family: Tahoma; font-size: 26px; font-weight: normal;margin: 0em 0em 10px -20px; padding-bottom: 8px; padding-left: 30px;padding-top: 16px;} pre { font-size:small; background-color: #e5e5cc; padding: 5px; font-family: Courier New; margin-top: 0px; border: 1px #f0f0e0 solid; white-space: pre-wrap; white-space: -pre-wrap; word-wrap: break-word; } table { border-collapse: collapse; border-spacing: 0px; font-family: Verdana;} table th { border-right: 2px white solid; border-bottom: 2px white solid; font-weight: bold; background-color: #cecf9c;} table td { border-right: 2px white solid; border-bottom: 2px white solid; background-color: #e5e5cc;}</style>
  </head>
  <body>
    <div id="content">
      <p class="heading1">Request Error</p>
      <p>The server encountered an error processing the request. The exception message is 'The incoming message has an unexpected message format 'Raw'. The expected message formats for the operation are 'Xml', 'Json'. This can be because a WebContentTypeMapper has not been configured on the binding. See the documentation of WebContentTypeMapper for more details.'. See server logs for more details. The exception stack trace is: </p>
      <p>   at System.ServiceModel.Dispatcher.DemultiplexingDispatchMessageFormatter.DeserializeRequest(Message message, Object[] parameters)
   at System.ServiceModel.Dispatcher.UriTemplateDispatchFormatter.DeserializeRequest(Message message, Object[] parameters)
   at System.ServiceModel.Dispatcher.DispatchOperationRuntime.DeserializeInputs(MessageRpc&amp; rpc)
   at System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc&amp; rpc)
   at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc&amp; rpc)
   at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage11(MessageRpc&amp; rpc)
   at System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)</p>
    </div>
  </body>
</html>
    [response] => Array
        (
           

 =&gt; 400<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [message] =&gt; Bad Request<br />
&nbsp; &nbsp; &nbsp; &nbsp; )<br />
<br />
&nbsp; &nbsp; [cookies] =&gt; Array<br />
&nbsp; &nbsp; &nbsp; &nbsp; (<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [0] =&gt; WP_Http_Cookie Object<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; (<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [name] =&gt; BPMSESSIONID</p>
 
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [value] =&gt; ipgxgr1is54x0kyg4tbzxrye</p>
 
<p><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [expires] =&gt;&nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [path] =&gt; /0<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [domain] =&gt;&nbsp;<a href="http://crmhub.bpmonline.com/">crmhub.bpmonline.com</a><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; )<br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; )<br />
<br />
&nbsp; &nbsp; [filename] =&gt;&nbsp;<br />
&nbsp; &nbsp; [http_response] =&gt; WP_HTTP_Requests_Response Object<br />
&nbsp; &nbsp; &nbsp; &nbsp; (<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [response:protected] =&gt; Requests_Response Object<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; (<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [body] =&gt; &lt;?xml version="1.0" encoding="utf-8"?&gt;<br />
&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "<a href="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd</a>"&gt;<br />
&lt;html xmlns="<a href="http://www.w3.org/1999/xhtml">http://www.w3.org/1999/xhtml</a>"&gt;<br />
&nbsp; &lt;head&gt;<br />
&nbsp; &nbsp; &lt;title&gt;Request Error&lt;/title&gt;<br />
&nbsp; &nbsp; &lt;style&gt;BODY { color: #000000; background-color: white; font-family: Verdana; margin-left: 0px; margin-top: 0px; } #content { margin-left: 30px; font-size: .70em; padding-bottom: 2em; } A:link { color: #336699; font-weight: bold; text-decoration: underline; } A:visited { color: #6699cc; font-weight: bold; text-decoration: underline; } A:active { color: #336699; font-weight: bold; text-decoration: underline; } .heading1 { background-color: #003366; border-bottom: #336699 6px solid; color: #ffffff; font-family: Tahoma; font-size: 26px; font-weight: normal;margin: 0em 0em 10px -20px; padding-bottom: 8px; padding-left: 30px;padding-top: 16px;} pre { font-size:small; background-color: #e5e5cc; padding: 5px; font-family: Courier New; margin-top: 0px; border: 1px #f0f0e0 solid; white-space: pre-wrap; white-space: -pre-wrap; word-wrap: break-word; } table { border-collapse: collapse; border-spacing: 0px; font-family: Verdana;} table th { border-right: 2px white solid; border-bottom: 2px white solid; font-weight: bold; background-color: #cecf9c;} table td { border-right: 2px white solid; border-bottom: 2px white solid; background-color: #e5e5cc;}&lt;/style&gt;<br />
&nbsp; &lt;/head&gt;<br />
&nbsp; &lt;body&gt;<br />
&nbsp; &nbsp; &lt;div id="content"&gt;<br />
&nbsp; &nbsp; &nbsp; &lt;p class="heading1"&gt;Request Error&lt;/p&gt;<br />
&nbsp; &nbsp; &nbsp; &lt;p&gt;The server encountered an error processing the request. The exception message is 'The incoming message has an unexpected message format 'Raw'. The expected message formats for the operation are 'Xml', 'Json'. This can be because a WebContentTypeMapper has not been configured on the binding. See the documentation of WebContentTypeMapper for more details.'. See server logs for more details. The exception stack trace is: &lt;/p&gt;<br />
&nbsp; &nbsp; &nbsp; &lt;p&gt;&nbsp; &nbsp;at System.ServiceModel.Dispatcher.DemultiplexingDispatchMessageFormatter.DeserializeRequest(Message message, Object[] parameters)<br />
&nbsp; &nbsp;at System.ServiceModel.Dispatcher.UriTemplateDispatchFormatter.DeserializeRequest(Message message, Object[] parameters)<br />
&nbsp; &nbsp;at System.ServiceModel.Dispatcher.DispatchOperationRuntime.DeserializeInputs(MessageRpc&amp;amp; rpc)<br />
&nbsp; &nbsp;at System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc&amp;amp; rpc)<br />
&nbsp; &nbsp;at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc&amp;amp; rpc)<br />
&nbsp; &nbsp;at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage11(MessageRpc&amp;amp; rpc)<br />
&nbsp; &nbsp;at System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)&lt;/p&gt;<br />
&nbsp; &nbsp; &lt;/div&gt;<br />
&nbsp; &lt;/body&gt;<br />
&lt;/html&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [raw] =&gt; HTTP/1.1 400 Bad Request<br />
Cache-Control: private<br />
Content-Type: text/html<br />
Server: Microsoft-IIS/10.0</p>
 
<p>Set-Cookie: BPMSESSIONID=ipgxgr1is54x0kyg4tbzxrye; path=/0; secure; HttpOnly<br />
X-AspNet-Version: 4.0.30319<br />
X-Powered-By:&nbsp;<a href="http://asp.net/">ASP.NET</a><br />
X-Frame-Options: SAMEORIGIN<br />
X-Content-Type-Options: nosniff</p>

Kalushka Denis,

You use wrong plugin. Please remove it. You can download the correct plugin by the link in the article. 

http://prntscr.com/lacqik

Eugene Podkovka,

Thanks! You were right.
It wasn’t easy for me to find out how can i add my function on submit button in last version of contact 7 form. May be you can add this information?
Here it is:
we can add this code in functions.php file  if we want it works for certain form:
add_action( 'wp_footer', 'mycustom_wp_footer' );

function mycustom_wp_footer() {
?>
<script type="text/javascript">
document.addEventListener( 'wpcf7mailsent', function( event ) {
    if ( 'PUT HERE YOUR FORM ID' == event.detail.contactFormId ) {
        createLead();
    }
}, false );
</script>
<?php
}
Or this code if we want it works for all forms:
 

add_action( 'wp_footer', 'mycustom_wp_footer' );

function mycustom_wp_footer() {
?>
<script type="text/javascript">
document.addEventListener( 'wpcf7mailsent', function( event ) {
            createLead();
}, false );
</script>
<?php
}

Kalushka Denis,

You don't need to embed any code if you already use the plugin. 

Eugene Podkovka,

Hi,

I am having problems to map data to UseEmail field. I cannot get the right value from checkbox and when I check the email the post request is not passing the value.

How do you manage to get this value?
Regards,

 

Victoria

varmandugon,

Please name the checkbox according to the rule in the point 4 of the manual. If it doesn't help, please send me the URL of the landing page, the name of the checkbox, the screenshot of the checkbox and the screenshot of the mapping. 

Wow! This was so smooth. I tried the integration with a test instance using Gravity forms and simply following the steps mentioned above, I was able to get it working. To be honest, I wasn't expecting it to be that easy, based on my previous experience with other add-ons from the marketplace, but I was really surprised.

Thanks for the plugin mate smiley

Hi Eugene Podkovka,

Can I map fields in my landing page which is not in BPM online script fields?

fields: {
        "Name": "css-selector", // Name of a visitor, submitting the page
        "Email": "css-selector", // Visitor's email
        "Zip": "css-selector", // Visitor's ZIP code
        "MobilePhone": "css-selector", // Visitor's phone number
        "Company": "css-selector", // Name of a company (for business landing pages)
        "Industry": "css-selector", // Company industry (for business landing pages)
        "FullJobTitle": "css-selector", // Visitor's job title (for business landing pages)
        "UseEmail": "css-selector", // Logical value: 'true' equals to visitor's opt-in to receive emails
        "City": "css-selector", // City
        "Country": "css-selector", // Country
       },

 

Other than above fields, can I map other columns? . for example "Customer need" or "product"?

Please help

Sriraksha KS,

Yes. You can find the field names in a section wizard. Click on edit a field and then take the value from the "name in DB" field.

Collette,

As Eugene wrote in his original message - website domain in the landing page setup in bpm'online should contain the bpm'online URL and * char

http://prntscr.com/ofj8vp

Best regards,

Oscar

pkoonar,

Please repeat the point 5 of the manual. If it doesn't help, please reply with a screenshot of the mapping.

Log in or register to comment